This repository has been archived by the owner on Sep 11, 2024. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 832
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* WIP * Store the release announcements in the account settings * Update TAC release announcement description * Fix settings content comparison * Add logging in case of failure * Watch settings changes * I add release announcement settings to disable it * Disable release announcement in e2e test * Add release announcement in e2e test * Add tests for ReleaseAnnouncementStore.ts * Update compound-web to `3.3.0` * Update TAC tests * Update Labs tests * Nits * Add test for ReleaseAnnouncement.tsx * Update `@vector-im/compound-web` * Add playwright snapshot * Delete false playwright screenshot * Wait for EW to be displayed after reload * Add screenshot * Clean util file * Renaming and comments fixing * Use second store instead of looking in the store. --------- Co-authored-by: R Midhun Suresh <[email protected]>
- Loading branch information
1 parent
156f2fa
commit 5815e70
Showing
18 changed files
with
805 additions
and
45 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
/* | ||
* | ||
* Copyright 2024 The Matrix.org Foundation C.I.C. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
* / | ||
*/ | ||
|
||
import { Page } from "@playwright/test"; | ||
|
||
import { test as base, expect } from "../../element-web-test"; | ||
|
||
/** | ||
* Set up for release announcement tests. | ||
*/ | ||
export const test = base.extend<{ | ||
util: Helpers; | ||
}>({ | ||
displayName: "Alice", | ||
botCreateOpts: { displayName: "Other User" }, | ||
|
||
util: async ({ page, app, bot }, use) => { | ||
await use(new Helpers(page)); | ||
}, | ||
}); | ||
|
||
export class Helpers { | ||
constructor(private page: Page) {} | ||
|
||
/** | ||
* Get the release announcement with the given name. | ||
* @param name | ||
* @private | ||
*/ | ||
private getReleaseAnnouncement(name: string) { | ||
return this.page.getByRole("dialog", { name }); | ||
} | ||
|
||
/** | ||
* Assert that the release announcement with the given name is visible. | ||
* @param name | ||
*/ | ||
async assertReleaseAnnouncementIsVisible(name: string) { | ||
await expect(this.getReleaseAnnouncement(name)).toBeVisible(); | ||
await expect(this.page).toMatchScreenshot(`release-announcement-${name}.png`); | ||
} | ||
|
||
/** | ||
* Assert that the release announcement with the given name is not visible. | ||
* @param name | ||
*/ | ||
assertReleaseAnnouncementIsNotVisible(name: string) { | ||
return expect(this.getReleaseAnnouncement(name)).not.toBeVisible(); | ||
} | ||
|
||
/** | ||
* Mark the release announcement with the given name as read. | ||
* If the release announcement is not visible, this will throw an error. | ||
* @param name | ||
*/ | ||
async markReleaseAnnouncementAsRead(name: string) { | ||
const dialog = this.getReleaseAnnouncement(name); | ||
await dialog.getByRole("button", { name: "Ok" }).click(); | ||
} | ||
} | ||
|
||
export { expect }; |
44 changes: 44 additions & 0 deletions
44
playwright/e2e/release-announcement/releaseAnnouncement.spec.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
/* | ||
* | ||
* Copyright 2024 The Matrix.org Foundation C.I.C. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
* / | ||
*/ | ||
|
||
import { test, expect } from "./"; | ||
|
||
test.describe("Release announcement", () => { | ||
test.use({ | ||
config: { | ||
features: { | ||
feature_release_announcement: true, | ||
}, | ||
}, | ||
labsFlags: ["threadsActivityCentre"], | ||
}); | ||
|
||
test("should display the release announcement process", async ({ page, app, util }) => { | ||
// The TAC release announcement should be displayed | ||
await util.assertReleaseAnnouncementIsVisible("Threads Activity Centre"); | ||
// Hide the release announcement | ||
await util.markReleaseAnnouncementAsRead("Threads Activity Centre"); | ||
await util.assertReleaseAnnouncementIsNotVisible("Threads Activity Centre"); | ||
|
||
await page.reload(); | ||
// Wait for EW to load | ||
await expect(page.getByRole("navigation", { name: "Spaces" })).toBeVisible(); | ||
// Check that once the release announcement has been marked as viewed, it does not appear again | ||
await util.assertReleaseAnnouncementIsNotVisible("Threads Activity Centre"); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file added
BIN
+61.2 KB
...easeAnnouncement.spec.ts/release-announcement-Threads-Activity-Centre-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
/* | ||
* | ||
* Copyright 2024 The Matrix.org Foundation C.I.C. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
* / | ||
*/ | ||
|
||
import React, { ComponentProps, JSX, PropsWithChildren } from "react"; | ||
import { ReleaseAnnouncement as ReleaseAnnouncementCompound } from "@vector-im/compound-web"; | ||
|
||
import { ReleaseAnnouncementStore, Feature } from "../../stores/ReleaseAnnouncementStore"; | ||
import { useIsReleaseAnnouncementOpen } from "../../hooks/useIsReleaseAnnouncementOpen"; | ||
|
||
interface ReleaseAnnouncementProps | ||
extends Omit<ComponentProps<typeof ReleaseAnnouncementCompound>, "open" | "onClick"> { | ||
feature: Feature; | ||
} | ||
|
||
/** | ||
* Display a release announcement component around the children | ||
* Wrapper gluing the release announcement compound and the ReleaseAnnouncementStore | ||
* @param feature - the feature to announce, should be listed in {@link Feature} | ||
* @param children | ||
* @param props | ||
* @constructor | ||
*/ | ||
export function ReleaseAnnouncement({ | ||
feature, | ||
children, | ||
...props | ||
}: PropsWithChildren<ReleaseAnnouncementProps>): JSX.Element { | ||
const enabled = useIsReleaseAnnouncementOpen(feature); | ||
|
||
return ( | ||
<ReleaseAnnouncementCompound | ||
open={enabled} | ||
onClick={() => ReleaseAnnouncementStore.instance.nextReleaseAnnouncement()} | ||
{...props} | ||
> | ||
{children} | ||
</ReleaseAnnouncementCompound> | ||
); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
/* | ||
* | ||
* Copyright 2024 The Matrix.org Foundation C.I.C. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
* / | ||
*/ | ||
|
||
import { useTypedEventEmitterState } from "./useEventEmitter"; | ||
import { Feature, ReleaseAnnouncementStore } from "../stores/ReleaseAnnouncementStore"; | ||
|
||
/** | ||
* Return true if the release announcement of the given feature is enabled | ||
* @param feature | ||
*/ | ||
export function useIsReleaseAnnouncementOpen(feature: Feature): boolean { | ||
return useTypedEventEmitterState( | ||
ReleaseAnnouncementStore.instance, | ||
"releaseAnnouncementChanged", | ||
() => ReleaseAnnouncementStore.instance.getReleaseAnnouncement() === feature, | ||
); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.