|
|
|
import path from 'path';
|
|
|
|
import { test, expect } from '@playwright/test';
|
|
|
|
import { importUser } from './testUtils';
|
|
|
|
|
|
|
|
test('Record item given from image-share', async ({ page }) => {
|
|
|
|
|
|
|
|
let randomString = Math.random().toString(36).substring(2, 8);
|
|
|
|
|
|
|
|
// Combine title prefix with the random string
|
|
|
|
const finalTitle = `Gift ${randomString} from image-share`;
|
|
|
|
|
|
|
|
await importUser(page, '00');
|
|
|
|
|
|
|
|
// Record something given
|
|
|
|
await page.goto('./test');
|
|
|
|
|
|
|
|
const fileChooserPromise = page.waitForEvent('filechooser');
|
|
|
|
await page.getByTestId('fileInput').click();
|
|
|
|
const fileChooser = await fileChooserPromise;
|
|
|
|
await fileChooser.setFiles(path.join(__dirname, '..', 'public', 'img', 'icons', 'android-chrome-192x192.png'));
|
|
|
|
await page.getByTestId('fileUploadButton').click();
|
|
|
|
|
|
|
|
// on shared photo page, choose the gift option
|
|
|
|
await page.getByRole('button').filter({ hasText: /gift/i }).click();
|
|
|
|
|
|
|
|
await page.getByTestId('imagery').getByRole('img').isVisible();
|
|
|
|
await page.getByPlaceholder('What was received').fill(finalTitle);
|
|
|
|
await page.getByRole('spinbutton').fill('2');
|
|
|
|
await page.getByRole('button', { name: 'Sign & Send' }).click();
|
|
|
|
await expect(page.getByText('That gift was recorded.')).toBeVisible();
|
|
|
|
|
|
|
|
|
|
|
|
// Refresh home view and check gift
|
|
|
|
await page.goto('./');
|
|
|
|
const item1 = page.locator('li').filter({ hasText: finalTitle });
|
|
|
|
await expect(item1.getByRole('img')).toBeVisible();
|
|
|
|
});
|
|
|
|
|
|
|
|
// // I believe there's a way to test this service worker feature.
|
|
|
|
// // The following is what I got from ChatGPT. I wonder if it doesn't work because it's not registering the service worker correctly.
|
|
|
|
//
|
|
|
|
// test('Trigger a photo-sharing fetch event in service worker with POST to /share-target', async ({ page }) => {
|
|
|
|
// await importUser(page, '00');
|
|
|
|
//
|
|
|
|
// // Create a FormData object with a photo
|
|
|
|
// const photoPath = path.join(__dirname, '..', 'public', 'img', 'icons', 'android-chrome-192x192.png');
|
|
|
|
// const photoContent = await fs.readFileSync(photoPath);
|
|
|
|
// const [response] = await Promise.all([
|
|
|
|
// page.waitForResponse(response => response.url().includes('/share-target')), // also check for response.status() === 303 ?
|
|
|
|
// page.evaluate(async (photoContent) => {
|
|
|
|
// const formData = new FormData();
|
|
|
|
// formData.append('photo', new Blob([photoContent], { type: 'image/png' }), 'test-photo.jpg');
|
|
|
|
//
|
|
|
|
// const response = await fetch('/share-target', {
|
|
|
|
// method: 'POST',
|
|
|
|
// body: formData,
|
|
|
|
// });
|
|
|
|
//
|
|
|
|
// return response;
|
|
|
|
// }, photoContent)
|
|
|
|
// ]);
|
|
|
|
//
|
|
|
|
// // Verify the response redirected to /shared-photo
|
|
|
|
// //expect(response.status).toBe(303);
|
|
|
|
// console.log('response headers', response.headers());
|
|
|
|
// console.log('response status', response.status());
|
|
|
|
// console.log('response url', response.url());
|
|
|
|
// expect(response.url()).toContain('/shared-photo');
|
|
|
|
// });
|