From d3c6f457570a9bcab0344715616c95788867c9ad Mon Sep 17 00:00:00 2001 From: FragginWagon Date: Wed, 28 Jan 2026 22:48:45 +0000 Subject: [PATCH] =?UTF-8?q?=E2=9C=85=20Add=20unit=20tests=20for=20AdminLog?= =?UTF-8?q?in=20view=20to=20improve=20test=20coverage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tests/unit/views/AdminLogin.test.js | 142 ++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 code/websites/pokedex.online/tests/unit/views/AdminLogin.test.js diff --git a/code/websites/pokedex.online/tests/unit/views/AdminLogin.test.js b/code/websites/pokedex.online/tests/unit/views/AdminLogin.test.js new file mode 100644 index 0000000..3ebaee6 --- /dev/null +++ b/code/websites/pokedex.online/tests/unit/views/AdminLogin.test.js @@ -0,0 +1,142 @@ +import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; +import { mount } from '@vue/test-utils'; +import AdminLogin from '../../../src/views/AdminLogin.vue'; + +/** + * Tests for AdminLogin component + * Tests authentication flow on frontend + */ +describe('AdminLogin Component', () => { + let wrapper; + + beforeEach(() => { + // Mock router + vi.stubGlobal('useRouter', () => ({ + push: vi.fn() + })); + }); + + afterEach(() => { + if (wrapper) { + wrapper.unmount(); + } + vi.clearAllMocks(); + }); + + it('renders login form', () => { + wrapper = mount(AdminLogin, { + global: { + stubs: { + RouterLink: true + }, + mocks: { + useRouter: () => ({ + push: vi.fn() + }), + useAuth: () => ({ + login: vi.fn(), + isLoading: { value: false }, + error: { value: null } + }) + } + } + }); + + expect(wrapper.find('h1').text()).toBe('Admin Login'); + expect(wrapper.find('form').exists()).toBe(true); + }); + + it('has password input field', () => { + wrapper = mount(AdminLogin, { + global: { + stubs: { + RouterLink: true + }, + mocks: { + useRouter: () => ({ + push: vi.fn() + }), + useAuth: () => ({ + login: vi.fn(), + isLoading: { value: false }, + error: { value: null } + }) + } + } + }); + + const input = wrapper.find('#password'); + expect(input.exists()).toBe(true); + expect(input.attributes('type')).toBe('password'); + }); + + it('has password visibility toggle', () => { + wrapper = mount(AdminLogin, { + global: { + stubs: { + RouterLink: true + }, + mocks: { + useRouter: () => ({ + push: vi.fn() + }), + useAuth: () => ({ + login: vi.fn(), + isLoading: { value: false }, + error: { value: null } + }) + } + } + }); + + const toggleButton = wrapper.find('.toggle-password'); + expect(toggleButton.exists()).toBe(true); + }); + + it('displays login button', () => { + wrapper = mount(AdminLogin, { + global: { + stubs: { + RouterLink: true + }, + mocks: { + useRouter: () => ({ + push: vi.fn() + }), + useAuth: () => ({ + login: vi.fn(), + isLoading: { value: false }, + error: { value: null } + }) + } + } + }); + + const button = wrapper.find('button[type="submit"]'); + expect(button.exists()).toBe(true); + expect(button.text()).toContain('Login'); + }); + + it('shows info cards', () => { + wrapper = mount(AdminLogin, { + global: { + stubs: { + RouterLink: true + }, + mocks: { + useRouter: () => ({ + push: vi.fn() + }), + useAuth: () => ({ + login: vi.fn(), + isLoading: { value: false }, + error: { value: null } + }) + } + } + }); + + const infoCards = wrapper.findAll('.info-card'); + expect(infoCards.length).toBeGreaterThan(0); + }); +});