import { login } from "../helpers";

describe("competenceCertificate.cy.js", () => {
  beforeEach(() => {});

  it("check without points", () => {
    cy.manageCommand("cypress_reset");
    login("test-student1@example.com", "test");
    cy.visit("/course/test-lehrgang/competence");

    cy.get('[data-cy="certificate-total-points-text"]').contains(
      "Der Punktestand wird zu einem späteren Zeitpunkt berechnet."
    );

    cy.get(
      '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]'
    )
      .should("contain", "0 von 0 Punkten")
      .and("contain", "0 von 2 Kompetenznachweis-Elementen");

    // check on certificates page
    cy.get('[data-cy="certificates-show-all-button"]').click();
    cy.get('[data-cy="certificate-total-points-text"]').contains(
      "Der Punktestand wird zu einem späteren Zeitpunkt berechnet."
    );

    cy.get(
      '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]'
    )
      .should(
        "contain",
        "Der Punktestand wird zu einem späteren Zeitpunkt berechnet."
      )
      .and("contain", "0 von 2 Kompetenznachweis-Elementen");

    // check certificate detail page
    cy.get(
      '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-detail-link"]'
    ).click();

    cy.get(
      '[data-cy="assignment-test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice"]'
    ).should("contain", "Höchstpunktzahl");
    cy.get(
      '[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"]'
    ).should("contain", "Höchstpunktzahl");
  });

  it("check with finished passed edoniq test", () => {
    cy.manageCommand(
      "cypress_reset --create-assignment-completion --create-edoniq-test-results 19 24"
    );
    login("test-student1@example.com", "test");
    cy.visit("/course/test-lehrgang/competence");

    cy.get('[data-cy="certificate-total-points-text"]').contains(
      "Zwischenstand Gesamtpunktzahl: 19 von 24 Punkten"
    );

    cy.get(
      '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]'
    )
      .should("contain", "19 von 24 Punkten")
      .and("contain", "1 von 2 Kompetenznachweis-Elementen");

    // check on certificates page
    cy.get('[data-cy="certificates-show-all-button"]').click();
    cy.get('[data-cy="certificate-total-points-text"]')
      .should("contain", "19")
      .and("contain", "Zwischenstand");

    cy.get(
      '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]'
    )
      .should("contain", "19")
      .and("contain", "Zwischenstand")
      .and("contain", "1 von 2 Kompetenznachweis-Elementen");

    // check certificate detail page
    cy.get(
      '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-detail-link"]'
    ).click();

    cy.get(
      '[data-cy="assignment-test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice"]'
    )
      .should("contain", "Höchstpunktzahl")
      .and("contain", "Ergebnisse abgegeben");
    cy.get(
      '[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"]'
    )
      .should("contain", "19")
      .and("contain", "Bewertung freigegeben")
      .and("not.contain", "Nicht Bestanden");

    // it can open learning content page directly
    cy.get(
      '[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"] [data-cy="open-learning-content"]'
    ).click();
    cy.get('[data-cy="test-result"]')
      .should("contain", "19 von 24 Punkten")
      .and("contain", "79%");
  });

  it("check with finished failed edoniq test", () => {
    cy.manageCommand(
      "cypress_reset --create-assignment-completion --create-edoniq-test-results 10 24"
    );
    login("test-student1@example.com", "test");

    // go to certificate detail page
    cy.visit(
      "/course/test-lehrgang/competence/certificates/kompetenznachweis-1"
    );

    cy.get(
      '[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"]'
    )
      .should("contain", "10")
      .and("contain", "Bewertung freigegeben")
      .and("contain", "42%")
      .and("contain", "Nicht bestanden");

    // it can open learning content page directly
    cy.get(
      '[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"] [data-cy="open-learning-content"]'
    ).click();
    cy.get('[data-cy="test-result"]')
      .should("contain", "10 von 24 Punkten")
      .and("contain", "42%")
      .and("contain", "Nicht bestanden");
  });

  it("check with finished edoniq test and finished casework", () => {
    cy.manageCommand(
      "cypress_reset --create-assignment-evaluation --create-edoniq-test-results 19 24"
    );
    login("test-student1@example.com", "test");
    cy.visit("/course/test-lehrgang/competence");

    cy.get('[data-cy="certificate-total-points-text"]').contains(
      "Zwischenstand Gesamtpunktzahl: 43 von 48 Punkten"
    );

    cy.get(
      '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]'
    )
      .should("contain", "43 von 48 Punkten")
      .and("contain", "2 von 2 Kompetenznachweis-Elementen");

    // check on certificates page
    cy.get('[data-cy="certificates-show-all-button"]').click();
    cy.get('[data-cy="certificate-total-points-text"]')
      .should("contain", "43")
      .and("not.contain", "Zwischenstand");

    cy.get(
      '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]'
    )
      .should("contain", "43")
      .and("not.contain", "Zwischenstand")
      .and("contain", "2 von 2 Kompetenznachweis-Elementen");

    // check certificate detail page
    cy.get(
      '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-detail-link"]'
    ).click();

    cy.get(
      '[data-cy="assignment-test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice"]'
    )
      .should("contain", "24")
      .and("contain", "von 24 Punkten")
      .and("contain", "Bewertung freigegeben");
    cy.get(
      '[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"]'
    )
      .should("contain", "19")
      .and("contain", "von 24 Punkten")
      .and("contain", "Bewertung freigegeben");
  });
});
