const { Builder, By, until } = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');

const webdriver = process.env.Chrome_DRIVER
const service = new chrome.ServiceBuilder(webdriver);
const login = require("./helperSimulations/simulateAdminLogin")

describe("After entering DegreeCourseManagement", () => {
    let driver

    beforeAll(async () => {
        driver = new Builder().forBrowser('chrome').setChromeService(service).build();
        await login(driver)
    })

    afterAll(async () => {
        await driver.quit();
    })

    it("should be able to find and click DegreeCourse-Management-Button", async () => {
        const degreeCourseManagementButton = await driver.wait(until.elementLocated(By.id("OpenDegreeCourseManagementPageButton")), 5000)
        expect(degreeCourseManagementButton).toBeDefined();
        await degreeCourseManagementButton.click();
    })

    it("should be able to find and click the button to create a degreeCourse", async () => {
        const degreeCourseManagementButton = await driver.wait(until.elementLocated(By.id("OpenDegreeCourseManagementPageButton")), 5000)
        expect(degreeCourseManagementButton).toBeDefined();
        await degreeCourseManagementButton.click();
        const createDegreeCourseButton = await driver.wait(until.elementLocated(By.id("DegreeCourseManagementPageCreateDegreeCourseButton")), 5000)
        expect(createDegreeCourseButton).toBeDefined();
    })
})

describe("To create new degreeCourse", () => {
    let driver

    beforeAll(async () => {
        driver = new Builder().forBrowser('chrome').setChromeService(service).build();
        await login(driver)
    })

    afterAll(async () => {
        await driver.quit();
    })

    it("needs a button to create a new degreeCourse", async () => {
        const degreeCourseManagementButton = await driver.wait(until.elementLocated(By.id("OpenDegreeCourseManagementPageButton")), 5000)
        expect(degreeCourseManagementButton).toBeDefined();
        await degreeCourseManagementButton.click();
        const createDegreeCourseButton = await driver.wait(until.elementLocated(By.id("DegreeCourseManagementPageCreateDegreeCourseButton")), 5000)
        expect(createDegreeCourseButton).toBeDefined();
    })

    it("should open a dialog to create a new degreeCourse", async () => {
        const degreeCourseManagementButton = await driver.wait(until.elementLocated(By.id("OpenDegreeCourseManagementPageButton")), 5000)
        expect(degreeCourseManagementButton).toBeDefined();
        await degreeCourseManagementButton.click();
        const createDegreeCourseButton = await driver.wait(until.elementLocated(By.id("DegreeCourseManagementPageCreateDegreeCourseButton")), 5000)
        expect(createDegreeCourseButton).toBeDefined();
        await createDegreeCourseButton.click();
        
        const degreeCourseNameTextField = await driver.wait(until.elementLocated(By.id("CreateDegreeCourseComponentEditName")), 5000)
        const shortNameTextField = await driver.wait(until.elementLocated(By.id("CreateDegreeCourseComponentEditShortName")), 5000)
        const universityNameTextField = await driver.wait(until.elementLocated(By.id("CreateDegreeCourseComponentEditUniversityName")), 5000)
        const universityShortNameTextField = await driver.wait(until.elementLocated(By.id("CreateDegreeCourseComponentEditUniversityShortName")), 5000)
        const departmentNameTextField = await driver.wait(until.elementLocated(By.id("CreateDegreeCourseComponentEditDepartmentName")), 5000)
        const departmentShortNameTextField = await driver.wait(until.elementLocated(By.id("CreateDegreeCourseComponentEditDepartmentShortName")), 5000)
        
        expect(degreeCourseNameTextField).toBeDefined();
        expect(shortNameTextField).toBeDefined();
        expect(universityNameTextField).toBeDefined();
        expect(universityShortNameTextField).toBeDefined();
        expect(departmentNameTextField).toBeDefined();
        expect(departmentShortNameTextField).toBeDefined();

        await degreeCourseNameTextField.sendKeys("Architektur")
        await shortNameTextField.sendKeys("AR")
        await universityNameTextField.sendKeys("Technische Hochschule")
        await universityShortNameTextField.sendKeys("TH")
        await departmentNameTextField.sendKeys("FB Architektur")
        await departmentShortNameTextField.sendKeys("FB V")
        
        const finishCreateDegreeCourseButton = await driver.wait(until.elementLocated(By.id("CreateDegreeCourseComponentCreateDegreeCourseButton")), 5000)
        expect(finishCreateDegreeCourseButton).toBeDefined();
        finishCreateDegreeCourseButton.click();
    })
})