diff --git a/VERSION b/VERSION index 0664a8f..3c43790 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.1.6 +1.2.6 diff --git a/e2e/fixtures/test-video.mp4 b/e2e/fixtures/test-video.mp4 new file mode 100644 index 0000000..eec7adc Binary files /dev/null and b/e2e/fixtures/test-video.mp4 differ diff --git a/e2e/pages/banner-detail.page.ts b/e2e/pages/banner-detail.page.ts index 41c1a58..cdc065d 100644 --- a/e2e/pages/banner-detail.page.ts +++ b/e2e/pages/banner-detail.page.ts @@ -56,10 +56,14 @@ export class BannerDetailPage extends BasePage { readonly endDateInput = () => this.page.locator('input#endDate'); - readonly imageFileInput = () => this.page.locator('input[type="file"][accept="image/*"]'); + readonly mediaFileInput = () => this.page.locator('input[type="file"]'); readonly uploadedImage = () => this.page.locator('img[alt="업로드된 이미지"]'); + readonly uploadedVideo = () => this.page.locator('video'); + + readonly uploadedMedia = () => this.page.locator('img[alt="업로드된 이미지"], video'); + readonly deleteDialog = () => this.page.getByRole('alertdialog'); readonly confirmDeleteButton = () => this.deleteDialog().getByRole('button', { name: '삭제' }); @@ -148,13 +152,19 @@ export class BannerDetailPage extends BasePage { async uploadTestImage() { const testImagePath = path.resolve(__dirname, '../fixtures/test-image.png'); - await this.imageFileInput().setInputFiles(testImagePath); - await this.uploadedImage().waitFor({ state: 'visible', timeout: 10000 }); + await this.mediaFileInput().setInputFiles(testImagePath); + await this.uploadedMedia().waitFor({ state: 'visible', timeout: 10000 }); + } + + async uploadTestVideo() { + const testVideoPath = path.resolve(__dirname, '../fixtures/test-video.mp4'); + await this.mediaFileInput().setInputFiles(testVideoPath); + await this.uploadedVideo().waitFor({ state: 'visible', timeout: 10000 }); } async ensureImage() { - const hasImage = await this.uploadedImage().isVisible().catch(() => false); - if (!hasImage) { + const hasMedia = await this.uploadedMedia().isVisible().catch(() => false); + if (!hasMedia) { await this.uploadTestImage(); } } diff --git a/e2e/specs/banners.spec.ts b/e2e/specs/banners.spec.ts index da3c433..8a3bc97 100644 --- a/e2e/specs/banners.spec.ts +++ b/e2e/specs/banners.spec.ts @@ -232,6 +232,36 @@ test.describe('배너 CRUD 플로우', () => { }); }); +test.describe('배너 동영상 업로드', () => { + test('동영상 파일 업로드 시 비디오 미리보기가 표시된다', async ({ page }) => { + const detailPage = new BannerDetailPage(page); + + await detailPage.gotoNew(); + + // 동영상 업로드 + await detailPage.uploadTestVideo(); + + //