Skip to content

Commit

Permalink
Merge pull request #39 from lens-protocol/feat/orb-and-orna
Browse files Browse the repository at this point in the history
feat: Collectz to Orna, and Orb updates
  • Loading branch information
cesarenaldi authored Feb 15, 2024
2 parents f8e0b9d + 9d78419 commit 3ea8aeb
Show file tree
Hide file tree
Showing 17 changed files with 123 additions and 243 deletions.
4 changes: 2 additions & 2 deletions e2e/desktop.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ test.use(devices["Desktop Chrome"]);

test.describe("Given a desktop browser", async () => {
test.describe("When opening a Publication link", async () => {
test("Then it should omit mobile apps options", async ({ textPost }) => {
test("Then it should omit mobile-only apps", async ({ textPost }) => {
await textPost.open();

await expect(textPost.options).not.toHaveText(["Orb", "Phaver", "Buttrfly"]);
await expect(textPost.options).not.toHaveText(["Phaver"]);
});
});
});
17 changes: 6 additions & 11 deletions e2e/fixtures/profiles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,15 @@ import { test as base, expect } from "@playwright/test";
import { ProfilePage } from "./ProfilePage";

export const test = base.extend<{
v1Profile: ProfilePage;
v1ProfileWithSuffix: ProfilePage;
v2Profile: ProfilePage;
lensProfile: ProfilePage;
anyProfile: ProfilePage;
}>({
v1Profile: async ({ page }, use) => {
const profile = new ProfilePage(page, "lensprotocol");
lensProfile: async ({ page }, use) => {
const profile = new ProfilePage(page, "lens/lens");
await use(profile);
},
v1ProfileWithSuffix: async ({ page }, use) => {
const profile = new ProfilePage(page, "lensprotocol.lens");
await use(profile);
},
v2Profile: async ({ page }, use) => {
const profile = new ProfilePage(page, "lens/lensprotocol");
anyProfile: async ({ page }, use) => {
const profile = new ProfilePage(page, "lens/stani");
await use(profile);
},
});
Expand Down
2 changes: 1 addition & 1 deletion e2e/mobile.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ test.describe("Given a mobile browser", async () => {
test("Then it should show in order mobile and web apps options", async ({ textPost }) => {
await textPost.open();

await expect(textPost.options).toHaveText(["Buttrfly", "Orb", "Hey", "Lensta", "Soclly"]);
await expect(textPost.options).toHaveText(["Buttrfly", "Hey", "orb", "Soclly"]);
});
});
});
172 changes: 41 additions & 131 deletions e2e/profiles.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,14 @@ test.use(devices["Desktop Chrome"]);

test.describe("Given a Profile link", async () => {
test.describe("When opening it", async () => {
test("Then it should show relevant app options", async ({ v1Profile }) => {
await v1Profile.open();
test("Then it should show relevant app options", async ({ anyProfile }) => {
await anyProfile.open();

await expect(v1Profile.options).toHaveText([
await expect(anyProfile.options).toHaveText([
"Buttrfly",
"Collectz",
"Hey",
"LensFrens",
"Lensta",
"orb",
"Orna",
"Riff",
"Soclly",
"Tape",
Expand All @@ -23,90 +22,28 @@ test.describe("Given a Profile link", async () => {
});
});

test.describe("Given a v1 Profile link posted on a social media website/app", async () => {
test.describe("When checking Open Graph meta tags", async () => {
test("Then it should render the expected base-line meta tags", async ({ v1Profile }) => {
await v1Profile.open();

expect(await v1Profile.extractOpenGraphProperties()).toMatchObject({
"og:title": `lens/${v1Profile.handle} profile`,
"og:description": "The Social Layer for Web3 🌿",
"og:url": expect.stringContaining(`/u/lens/${v1Profile.handle}`),
"og:site_name": "Lens Share",
"og:type": "profile",
});
});

test("Then it should include the expected Twitter Card meta tags", async ({ v1Profile }) => {
await v1Profile.open();

expect(await v1Profile.extractTwitterMetaTags()).toEqual({
"twitter:card": "summary_large_image",
"twitter:site": "LensProtocol",
"twitter:title": `lens/${v1Profile.handle} profile`,
"twitter:description": "The Social Layer for Web3 🌿",
"twitter:image": expect.any(String),
"twitter:image:type": "image/png",
});
});
});
});

test.describe("Given a v1 Profile link with suffix posted on a social media website/app", async () => {
test.describe("When checking Open Graph meta tags", async () => {
test("Then it should render the expected base-line meta tags", async ({
v1ProfileWithSuffix,
}) => {
await v1ProfileWithSuffix.open();

expect(await v1ProfileWithSuffix.extractOpenGraphProperties()).toMatchObject({
"og:title": `lens/lensprotocol profile`,
"og:description": "The Social Layer for Web3 🌿",
"og:url": expect.stringContaining(`/u/lens/lensprotocol`),
"og:site_name": "Lens Share",
"og:type": "profile",
});
});

test("Then it should include the expected Twitter Card meta tags", async ({
v1ProfileWithSuffix,
}) => {
await v1ProfileWithSuffix.open();

expect(await v1ProfileWithSuffix.extractTwitterMetaTags()).toEqual({
"twitter:card": "summary_large_image",
"twitter:site": "LensProtocol",
"twitter:title": `lens/lensprotocol profile`,
"twitter:description": "The Social Layer for Web3 🌿",
"twitter:image": expect.any(String),
"twitter:image:type": "image/png",
});
});
});
});

test.describe("Given a v2 Profile link posted on a social media website/app", async () => {
test.describe("Given a Profile link posted on a social media website/app", async () => {
test.describe("When checking Open Graph meta tags", async () => {
test("Then it should render the expected base-line meta tags", async ({ v2Profile }) => {
await v2Profile.open();
test("Then it should render the expected base-line meta tags", async ({ lensProfile }) => {
await lensProfile.open();

expect(await v2Profile.extractOpenGraphProperties()).toMatchObject({
"og:title": `${v2Profile.handle} profile`,
"og:description": "The Social Layer for Web3 🌿",
"og:url": expect.stringContaining(`/u/${v2Profile.handle}`),
expect(await lensProfile.extractOpenGraphProperties()).toMatchObject({
"og:title": `${lensProfile.handle} profile`,
"og:description": "onchain social",
"og:url": expect.stringContaining(`/u/${lensProfile.handle}`),
"og:site_name": "Lens Share",
"og:type": "profile",
});
});

test("Then it should include the expected Twitter Card meta tags", async ({ v2Profile }) => {
await v2Profile.open();
test("Then it should include the expected Twitter Card meta tags", async ({ lensProfile }) => {
await lensProfile.open();

expect(await v2Profile.extractTwitterMetaTags()).toEqual({
expect(await lensProfile.extractTwitterMetaTags()).toEqual({
"twitter:card": "summary_large_image",
"twitter:site": "LensProtocol",
"twitter:title": `${v2Profile.handle} profile`,
"twitter:description": "The Social Layer for Web3 🌿",
"twitter:title": `${lensProfile.handle} profile`,
"twitter:description": "onchain social",
"twitter:image": expect.any(String),
"twitter:image:type": "image/png",
});
Expand All @@ -117,26 +54,22 @@ test.describe("Given a v2 Profile link posted on a social media website/app", as
test.describe("Given a Profile link posted on a social media website/app", async () => {
test.describe("When the link includes the `by` attribution param", async () => {
test("Then it should mention the originating app in page `title` and Open Graph `site_name` tag", async ({
v1Profile,
anyProfile,
}) => {
await v1Profile.openAsSharedBy("Hey");
await anyProfile.openAsSharedBy("Hey");

expect(await v1Profile.getTitle()).toContain("Hey");
expect(await v1Profile.extractOpenGraphProperties()).toMatchObject({
expect(await anyProfile.getTitle()).toContain("Hey");
expect(await anyProfile.extractOpenGraphProperties()).toMatchObject({
"og:site_name": "Hey",
});
});

test("Then it should mention the originating app in Twitter Card `site` if a Twitter handle is provided in the app manifest", async ({
v1Profile,
anyProfile,
}) => {
await v1Profile.openAsSharedBy("Hey");
await anyProfile.openAsSharedBy("Hey");

expect(await v1Profile.getTitle()).toContain("Hey");
expect(await v1Profile.extractOpenGraphProperties()).toMatchObject({
"og:site_name": "Hey",
});
expect(await v1Profile.extractTwitterMetaTags()).toMatchObject({
expect(await anyProfile.extractTwitterMetaTags()).toMatchObject({
"twitter:site": "heydotxyz",
});
});
Expand All @@ -145,15 +78,14 @@ test.describe("Given a Profile link posted on a social media website/app", async

test.describe("Given a Profile link with `by` attribution param", async () => {
test.describe("When opening it", async () => {
test("Then it should show the specified app first", async ({ v1Profile }) => {
await v1Profile.openAsSharedBy("Hey");
test("Then it should show the specified app first", async ({ anyProfile }) => {
await anyProfile.openAsSharedBy("Hey");

await expect(v1Profile.options).toHaveText([
await expect(anyProfile.options).toHaveText([
"Hey",
"Buttrfly",
"Collectz",
"LensFrens",
"Lensta",
"orb",
"Orna",
"Riff",
"Soclly",
"Tape",
Expand All @@ -163,55 +95,33 @@ test.describe("Given a Profile link with `by` attribution param", async () => {

test.describe("When opening it on a platform not supported by the specified app", async () => {
test("Then it should show a message an attribution message before offering other options", async ({
v1Profile,
anyProfile,
}) => {
await v1Profile.openAsSharedBy("orb");

await expect(v1Profile.context).toHaveText("Shared via Orb mobile app.");
});
});
});

test.describe("Given an opened v1 Profile link", async () => {
test.describe("When submitting an app choice", async () => {
test("Then it should open the publication with the selected app", async ({ v1Profile }) => {
await v1Profile.open();
const url = await v1Profile.justOnce("Hey");

expect(url).toMatch(`https://hey.xyz/u/lens/${v1Profile.handle}`);
});
});

test.describe("When submitting an app choice with 'Remember' checkbox selected", async () => {
test("Then it should use the same app for all future publications", async ({ v1Profile }) => {
await v1Profile.open();
await v1Profile.remember("Hey");

const response = await v1Profile.open();
await anyProfile.openAsSharedBy("phaver");

expect(response?.url()).toMatch(`https://hey.xyz/u/lens/${v1Profile.handle}`);
await expect(anyProfile.context).toHaveText("Shared via Phaver.");
});
});
});

test.describe("Given an opened v2 Profile link", async () => {
test.describe("When submitting an app choice", async () => {
test("Then it should open the publication with the selected app", async ({ v2Profile }) => {
await v2Profile.open();
const url = await v2Profile.justOnce("Hey");
test("Then it should open the publication with the selected app", async ({ anyProfile }) => {
await anyProfile.open();
const url = await anyProfile.justOnce("Hey");

expect(url).toMatch(`https://hey.xyz/u/${v2Profile.handle}`);
expect(url).toMatch(`https://hey.xyz/u/${anyProfile.handle}`);
});
});

test.describe("When submitting an app choice with 'Remember' checkbox selected", async () => {
test("Then it should use the same app for all future publications", async ({ v2Profile }) => {
await v2Profile.open();
await v2Profile.remember("Hey");
test("Then it should use the same app for all future publications", async ({ anyProfile }) => {
await anyProfile.open();
await anyProfile.remember("Hey");

const response = await v2Profile.open();
const response = await anyProfile.open();

expect(response?.url()).toMatch(`https://hey.xyz/u/${v2Profile.handle}`);
expect(response?.url()).toMatch(`https://hey.xyz/u/${anyProfile.handle}`);
});
});
});
30 changes: 19 additions & 11 deletions e2e/publications.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,7 @@ test.describe("Given a Publication link", async () => {
test("Then it should show relevant app options", async ({ imagePost }) => {
await imagePost.open();

await expect(imagePost.options).toHaveText([
"Buttrfly",
"Collectz",
"Hey",
"Lensta",
"Soclly",
]);
await expect(imagePost.options).toHaveText(["Buttrfly", "Hey", "orb", "Orna", "Soclly"]);
});
});
});
Expand Down Expand Up @@ -117,7 +111,14 @@ test.describe("Given a Video Publication link", async () => {
}) => {
await videoPost.open();

await expect(videoPost.options).toHaveText(["Buttrfly", "Collectz", "Hey", "Soclly", "Tape"]);
await expect(videoPost.options).toHaveText([
"Buttrfly",
"Hey",
"orb",
"Orna",
"Soclly",
"Tape",
]);
});
});
});
Expand All @@ -127,17 +128,24 @@ test.describe("Given a Publication link with `by` attribution param", async () =
test("Then it should show the specified app first", async ({ videoPost }) => {
await videoPost.openAsSharedBy("tape");

await expect(videoPost.options).toHaveText(["Tape", "Buttrfly", "Collectz", "Hey", "Soclly"]);
await expect(videoPost.options).toHaveText([
"Tape",
"Buttrfly",
"Hey",
"orb",
"Orna",
"Soclly",
]);
});
});

test.describe("When opening it on a platform not supported by the specified app", async () => {
test("Then it should show a message an attribution message before offering other options", async ({
videoPost,
}) => {
await videoPost.openAsSharedBy("orb");
await videoPost.openAsSharedBy("phaver");

await expect(videoPost.context).toHaveText("Shared via Orb mobile app.");
await expect(videoPost.context).toHaveText("Shared via Phaver.");
});
});
});
Expand Down
20 changes: 0 additions & 20 deletions manifests/buttrfly-web.json

This file was deleted.

2 changes: 1 addition & 1 deletion manifests/buttrfly.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"appId": "buttrfly",
"name": "Buttrfly",
"description": "Web3 Social Explorer",
"platform": "mobile",
"platform": "web",
"icon": {
"url": "https://buttrfly.app/buttrfly-icon-rounded.png",
"background": "#111111"
Expand Down
Loading

0 comments on commit 3ea8aeb

Please sign in to comment.