diff --git a/data/class/pages/admin/basis/LC_Page_Admin_Basis_Holiday.php b/data/class/pages/admin/basis/LC_Page_Admin_Basis_Holiday.php index aba3c8424a..73307836ed 100644 --- a/data/class/pages/admin/basis/LC_Page_Admin_Basis_Holiday.php +++ b/data/class/pages/admin/basis/LC_Page_Admin_Basis_Holiday.php @@ -88,7 +88,7 @@ public function action() // 編集処理 case 'edit': $this->arrErr = $this->lfCheckError($objFormParam, $objHoliday); - if (!SC_Utils_Ex::isBlank($this->arrErr['holiday_id'])) { + if (!SC_Utils_Ex::isBlank($this->arrErr['holiday_id'] ?? '')) { trigger_error('', E_USER_ERROR); return; @@ -201,7 +201,11 @@ public function lfCheckError(&$objFormParam, SC_Helper_Holiday_Ex &$objHoliday) if ($arrForm['month'] == 2 && $arrForm['day'] == 29) { $valid_date = true; } else { - $valid_date = checkdate($arrForm['month'], $arrForm['day'], date('Y')); + if (SC_Utils_Ex::isBlank($arrForm['month']) || SC_Utils_Ex::isBlank($arrForm['day'])) { + $valid_date = false; + } else { + $valid_date = checkdate($arrForm['month'], $arrForm['day'], date('Y')); + } } if (!$valid_date) { $arrErr['date'] = '※ 妥当な日付ではありません。
'; diff --git a/e2e-tests/test/admin/basis/holiday.test.ts b/e2e-tests/test/admin/basis/holiday.test.ts new file mode 100644 index 0000000000..6ff211f35a --- /dev/null +++ b/e2e-tests/test/admin/basis/holiday.test.ts @@ -0,0 +1,62 @@ +import { test, expect } from '../../../fixtures/admin_login.fixture'; +import { ADMIN_DIR } from '../../../config/default.config'; +import { faker } from '@faker-js/faker/locale/ja'; + +const url = `/${ ADMIN_DIR }/basis/holiday.php`; +test.describe('定休日管理画面のテストをします', () => { + + test('定休日管理画面のテストをします', async ( { adminLoginPage, page }) => { + await page.goto(url); + await expect(page.locator('h1')).toContainText(/定休日管理/); + }); + + test('エラーハンドリングのテストをします', async ( { adminLoginPage, page }) => { + await page.goto(url); + expect(page.getByRole('row', { name: 'タイトル' }).getByRole('textbox')).toBeEmpty(); + await expect(page.getByRole('row', { name: '日付' }).locator('select[name=month]')).toHaveValue(''); + await expect(page.getByRole('row', { name: '日付' }).locator('select[name=day]')).toHaveValue(''); + await page.getByRole('link', { name: 'この内容で登録する' }).click(); + await expect(page.getByText('タイトルが入力されていません。')).toBeVisible(); + await expect(page.getByText('妥当な日付ではありません。')).toBeVisible(); + }); + + test('定休日の登録をします', async ( { adminLoginPage, page }) => { + page.on('dialog', dialog => dialog.accept()); + await page.goto(url); + + const title = faker.lorem.sentence(); + await test.step('登録処理をします', async () => { + await page.getByRole('row', { name: 'タイトル' }).getByRole('textbox').fill(title); + await page.getByRole('row', { name: '日付' }).locator('select[name=month]').selectOption({ value: String(faker.number.int({ min: 1, max: 12 })) }); + await page.getByRole('row', { name: '日付' }).locator('select[name=day]').selectOption({ value: String(faker.number.int({ min: 1, max: 28 })) }); + + await page.getByRole('link', { name: 'この内容で登録する' }).click(); + await expect(page.locator('table.list')).toContainText(title); + }); + await test.step('登録処理をします', async () => { + await page.getByRole('row', { name: 'タイトル' }).getByRole('textbox').fill(title); + await page.getByRole('row', { name: '日付' }).locator('select[name=month]').selectOption({ value: String(faker.number.int({ min: 1, max: 12 })) }); + await page.getByRole('row', { name: '日付' }).locator('select[name=day]').selectOption({ value: String(faker.number.int({ min: 1, max: 28 })) }); + + await page.getByRole('link', { name: 'この内容で登録する' }).click(); + await expect(page.locator('table.list')).toContainText(title); + }); + + await test.step('編集をします', async () => { + await page.goto(url); + await page.getByRole('row', { name: title }).getByRole('link', { name: '編集' }).click(); + await page.getByRole('row', { name: 'タイトル' }).getByRole('textbox').fill(`${title}を編集`); + await page.getByRole('row', { name: '日付' }).locator('select[name=month]').selectOption({ value: String(faker.number.int({ min: 1, max: 12 })) }); + await page.getByRole('row', { name: '日付' }).locator('select[name=day]').selectOption({ value: String(faker.number.int({ min: 1, max: 28 })) }); + + await page.getByRole('link', { name: 'この内容で登録する' }).click(); + await expect(page.locator('table.list')).toContainText(`${title}を編集`); + }); + + await test.step('削除をします', async () => { + await page.goto(url); + await page.getByRole('row', { name: `${title}を編集` }).getByRole('link', { name: '削除' }).click(); + await expect(page.locator('table.list')).not.toContainText(`${title}を編集`); + }); + }); +});