describe("Форма Входа", () => {
	beforeEach(() => {
		cy.visit("http://localhost:3000")
		cy.wait(1000)
		cy.contains("Личный кабинет").click()
	})

	it("должна успешно входить с правильными учетными данными", () => {
		const login = "valid_user@example.com"
		const password = "valid_password"

		cy.get("#login").type(login)
		cy.get("#password").type(password)
		cy.get("button[type=\"submit\"]").click()

		cy.wait(2000)
		cy.url().should("include", "http://localhost:3000/tariffs")
	})

	it("должна отображать два сообщение об ошибке при отсутствии полей", () => {
		cy.get("button[type=\"submit\"]").click()

		cy.wait(2000)
		cy.get("#password-helper-text").should("contain", "Поле обязательно")
		cy.get("#login-helper-text").should("contain", "Поле обязательно")
	})

	it("должна отображать сообщение об ошибке при отсутствии пароля", () => {
		cy.get("#login").type("valid_email@example.com")
		cy.get("button[type=\"submit\"]").click()

		cy.get("#password-helper-text").should("contain", "Поле обязательно")
	})

	it("должна отображать сообщение об ошибке при отсутствии Логина", () => {
		cy.get("#password").type("valid_password")
		cy.get("button[type=\"submit\"]").click()

		cy.get("#login-helper-text").should("contain", "Поле обязательно")
	})
})

describe("Форма регистрации", () => {
	beforeEach(() => {
		cy.visit("http://localhost:3000")
		cy.wait(1000)
		cy.contains("Личный кабинет").click()
		cy.contains("Регистрация").click()
	})

	it("должна регистрировать нового пользователя с правильными данными", () => {
		const login = Cypress._.random(1000) + "@example.com"
		const password = "valid_password"

		cy.get("#login").type(login)
		cy.get("#password").type(password)
		cy.get("#repeatPassword").type(password)

		cy.get("button[type=\"submit\"]").click()
		cy.wait(5000)

		cy.url().should("include", "http://localhost:3000/tariffs")
	})

	it("должна отображать ошибку при отсутсвии логина", () => {
		cy.get("#password").type("valid_password")
		cy.get("#repeatPassword").type("valid_password")

		cy.get("button[type=\"submit\"]").click()

		cy.get("#login-helper-text").should("contain", "Поле обязательно")
	})

	it("должна отображать ошибку при отсутствии пароля", () => {
		cy.get("#login").type("valid_login")

		cy.get("button[type=\"submit\"]").click()

		cy.get("#password-helper-text").should("contain", "Поле обязательно")
	})

	it("должна отображать ошибку при отсутствии поля Повторения пароля", () => {
		cy.get("#login").type("valid_login")
		cy.get("#password").type("valid_password")

		cy.get("button[type=\"submit\"]").click()

		cy.get("#repeatPassword-helper-text").should("contain", "Повторите пароль")
	})

	it("должна отображать ошибку при некоректном пароле", () => {
		cy.get("#login").type("valid_log")
		cy.get("#password").type("valid@12_-_@@password")

		cy.get("button[type=\"submit\"]").click()

		cy.get("#password-helper-text").should("contain", "Некорректные символы")

		cy.get("#repeatPassword-helper-text").should("contain", "Повторите пароль")
	})

	it("должна отображать ошибку при несовпадении паролей", () => {
		cy.get("#login").type("valid_login")
		cy.get("#password").type("valid_password")
		cy.get("#repeatPassword").type("invalidPassword")

		cy.get("button[type=\"submit\"]").click()

		cy.get("#repeatPassword-helper-text").should("contain", "Пароли не совпадают")
	})

	it("попытка отправки запроса при уже зарегистрированном пользователе", () => {
		const login = "valid_user@example.com"
		const password = "valid_password"

		cy.get("#login").type(login)
		cy.get("#password").type(password)
		cy.get("#repeatPassword").type(password)

		cy.get("button[type=\"submit\"]").click()

		cy.wait(5000)
		cy.contains("user with this login is exist")
	})
})
