diff --git a/android/app/src/main/res/layout/activity_main.xml b/android/app/src/main/res/layout/activity_main.xml new file mode 100644 index 00000000..b5ad1387 --- /dev/null +++ b/android/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,12 @@ + + + + + diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml new file mode 100644 index 00000000..14ae83c9 --- /dev/null +++ b/android/app/src/main/res/values/strings.xml @@ -0,0 +1,7 @@ + + + TimeSafari + TimeSafari + timesafari.app + timesafari.app + diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml new file mode 100644 index 00000000..be874e54 --- /dev/null +++ b/android/app/src/main/res/values/styles.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/android/app/src/main/res/xml/config.xml b/android/app/src/main/res/xml/config.xml new file mode 100644 index 00000000..1b1b0e0d --- /dev/null +++ b/android/app/src/main/res/xml/config.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/android/app/src/main/res/xml/file_paths.xml b/android/app/src/main/res/xml/file_paths.xml new file mode 100644 index 00000000..680bb50e --- /dev/null +++ b/android/app/src/main/res/xml/file_paths.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/test-playwright/40-add-contact.spec.ts b/test-playwright/40-add-contact.spec.ts index 677d7278..d877a1f2 100644 --- a/test-playwright/40-add-contact.spec.ts +++ b/test-playwright/40-add-contact.spec.ts @@ -175,17 +175,11 @@ test('Add contact, record gift, confirm gift', async ({ page }) => { }); test('Without being registered, add contacts without registration', async ({ page, context }) => { - await page.goto('./account'); - // wait until the DID shows on the page in the 'did' element - const didElem = await page.getByTestId('didWrapper').locator('code'); - const newDid = await didElem.innerText(); - expect(newDid.trim()).toEqual(''); - // Add new contact without registering await page.goto('./contacts'); await page.getByPlaceholder('URL or DID, Name, Public Key').fill('did:ethr:0x111d15564f824D56C7a07b913aA7aDd03382aA39, User #111'); await page.locator('button > svg.fa-plus').click(); - await expect(page.locator('div[role="alert"] span:has-text("Contact Added")')).toBeVisible(); + await expect(page.locator('div[role="alert"] span:has-text("Success")')).toBeVisible(); await page.locator('div[role="alert"] button > svg.fa-xmark').click(); // dismiss info alert // wait for the alert to disappear, which also ensures that there is no "Register" button waiting await expect(page.locator('div[role="alert"]')).toBeHidden(); @@ -202,7 +196,7 @@ test('Add contact, copy details, delete, and import from paste & from file', asy await expect(page.locator('div[role="alert"]')).toBeVisible(); await expect(page.locator('div[role="alert"] span:has-text("No")')).toBeVisible(); await page.locator('div[role="alert"] button:has-text("No")').click(); // don't register - await expect(page.locator('div[role="alert"] span:has-text("Contact Added")')).toBeVisible(); + await expect(page.locator('div[role="alert"] span:has-text("Success")')).toBeVisible(); await page.locator('div[role="alert"] button > svg.fa-xmark').click(); // dismiss info alert // wait for the alert to disappear await expect(page.locator('div[role="alert"]')).toBeHidden(); @@ -212,7 +206,7 @@ test('Add contact, copy details, delete, and import from paste & from file', asy await page.locator('button > svg.fa-plus').click(); await expect(page.locator('div[role="alert"] span:has-text("No")')).toBeVisible(); await page.locator('div[role="alert"] button:has-text("No")').click(); // don't register - await expect(page.locator('div[role="alert"] span:has-text("Contact Added")')).toBeVisible(); + await expect(page.locator('div[role="alert"] span:has-text("Success")')).toBeVisible(); await page.locator('div[role="alert"] button > svg.fa-xmark').click(); // dismiss info alert await expect(page.locator('div[role="alert"]')).toBeHidden(); @@ -223,13 +217,12 @@ test('Add contact, copy details, delete, and import from paste & from file', asy // Copy contact details await page.getByTestId('contactCheckAllTop').click(); await page.getByTestId('copySelectedContactsButtonTop').click(); - await page.locator('div[role="alert"] button > svg.fa-xmark').click(); // dismiss alert await expect(page.locator('div[role="alert"]')).toBeHidden(); // I would prefer to copy from the clipboard, but the recommended approaches don't work. // See a different clipboard solution below. // see contact details on the second contact - await page.getByTestId('contactListItem').nth(1).locator('a').click(); + await page.getByTestId('contactListItem').nth(1).locator('h2 > a').click(); await page.getByRole('heading', { name: 'Identifier Details' }).isVisible(); // remove contact await page.locator('button > svg.fa-trash-can').click(); @@ -242,7 +235,7 @@ test('Add contact, copy details, delete, and import from paste & from file', asy // It works when we set the config to use a local server. // Seems like we hit a similar problem above. await page.locator('div[role="alert"] button > svg.fa-xmark').click(); // dismiss alert - await expect(page.locator('div[role="alert"]')).toBeHidden(); + await expect(page.getByRole('alert').filter({ hasText: 'Success Contact has been' })).toBeHidden(); // go to the contacts page and paste the copied contact details await page.goto('./contacts'); @@ -264,7 +257,7 @@ test('Add contact, copy details, delete, and import from paste & from file', asy await page.getByRole('heading', { name: 'Advanced' }).click(); const fileSelect = await page.locator('input[type="file"]') fileSelect.setInputFiles('./test-playwright/exported-data.json'); - await page.locator('button', { hasText: 'Import Only Contacts' }).click(); + await page.locator('button', { hasText: 'Import Contacts' }).click(); // we're on the contact-import page await expect(page.locator('li', { hasText: '- New' })).toHaveCount(3); await expect(page.locator('li', { hasText: '- Existing' })).toHaveCount(1); @@ -284,7 +277,7 @@ test('Copy contact to clipboard, then import ', async ({ page, context }, testIn await page.getByRole('heading', { name: 'Advanced' }).click(); const fileSelect = await page.locator('input[type="file"]') fileSelect.setInputFiles('./test-playwright/exported-data.json'); - await page.locator('button', { hasText: 'Import Only Contacts' }).click(); + await page.locator('button', { hasText: 'Import Contacts' }).click(); // we're on the contact-import page await expect(page.getByRole('heading', { name: "Contact Import" })).toBeVisible(); await page.locator('button', { hasText: 'Import' }).click(); @@ -326,11 +319,10 @@ test('Copy contact to clipboard, then import ', async ({ page, context }, testIn const webServer = testInfo.config.webServer; const clientServerUrl = webServer?.url; - const PATH_PART = clientServerUrl + "/contact-import/"; - expect(clipboardText).toContain(PATH_PART); + const PATH_PART = clientServerUrl + "/deep-link/contact-import/"; + await expect(clipboardText).toContain(PATH_PART); - await page.locator('div[role="alert"] button > svg.fa-xmark').click(); // dismiss alert - await expect(page.locator('div[role="alert"]')).toBeHidden(); + await expect(page.locator('div[role="alert"]')).toBeHidden({ timeout: 7000 }); await page.goto(clipboardText); // we're on the contact-import page diff --git a/test-playwright/60-new-activity.spec.ts b/test-playwright/60-new-activity.spec.ts index 0856e575..e0a5633f 100644 --- a/test-playwright/60-new-activity.spec.ts +++ b/test-playwright/60-new-activity.spec.ts @@ -12,13 +12,13 @@ test('New offers for another user', async ({ page }) => { await page.getByPlaceholder('URL or DID, Name, Public Key').fill(user01Did + ', A Friend'); await expect(page.locator('button > svg.fa-plus')).toBeVisible(); await page.locator('button > svg.fa-plus').click(); - await expect(page.locator('div[role="alert"] span:has-text("Contact Added")')).toBeVisible(); await page.locator('div[role="alert"] button:has-text("No")').click(); // don't register + await expect(page.locator('div[role="alert"] span:has-text("Success")')).toBeVisible(); await page.locator('div[role="alert"] button > svg.fa-xmark').click(); // dismiss info alert await expect(page.locator('div[role="alert"] button > svg.fa-xmark')).toBeHidden(); // ensure alert is gone // show buttons to make offers directly to people - await page.getByRole('button').filter({ hasText: /See Hours/i }).click(); + await page.getByRole('button').filter({ hasText: /See Actions/i }).click(); // make an offer directly to user 1 // Generate a random string of 3 characters, skipping the "0." at the beginning