diff --git a/packages/announcement-controller/CHANGELOG.md b/packages/announcement-controller/CHANGELOG.md index f43ac31e58e..92463479844 100644 --- a/packages/announcement-controller/CHANGELOG.md +++ b/packages/announcement-controller/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- Add two new controller state metadata properties: `includeInStateLogs` and `usedInUi` ([#6524](https://github.com/MetaMask/core/pull/6524)) + ### Changed - Bump `@metamask/base-controller` from `^8.0.0` to `^8.3.0` ([#5722](https://github.com/MetaMask/core/pull/5722), [#6284](https://github.com/MetaMask/core/pull/6284), [#6355](https://github.com/MetaMask/core/pull/6355), [#6465](https://github.com/MetaMask/core/pull/6465)) diff --git a/packages/announcement-controller/src/AnnouncementController.test.ts b/packages/announcement-controller/src/AnnouncementController.test.ts index 56991f6ff53..32fed68792e 100644 --- a/packages/announcement-controller/src/AnnouncementController.test.ts +++ b/packages/announcement-controller/src/AnnouncementController.test.ts @@ -1,4 +1,4 @@ -import { Messenger } from '@metamask/base-controller'; +import { Messenger, deriveStateFromMetadata } from '@metamask/base-controller'; import type { AnnouncementControllerState, @@ -164,4 +164,126 @@ describe('announcement controller', () => { expect(controller.state.announcements[3].isShown).toBe(true); }); }); + + describe('metadata', () => { + it('includes expected state in debug snapshots', () => { + const controller = new AnnouncementController({ + messenger: getRestrictedMessenger(), + allAnnouncements, + }); + + expect( + deriveStateFromMetadata( + controller.state, + controller.metadata, + 'anonymous', + ), + ).toMatchInlineSnapshot(` + Object { + "announcements": Object { + "1": Object { + "date": "12/8/2020", + "id": 1, + "isShown": false, + }, + "2": Object { + "date": "12/8/2020", + "id": 2, + "isShown": false, + }, + }, + } + `); + }); + + it('includes expected state in state logs', () => { + const controller = new AnnouncementController({ + messenger: getRestrictedMessenger(), + allAnnouncements, + }); + + expect( + deriveStateFromMetadata( + controller.state, + controller.metadata, + 'includeInStateLogs', + ), + ).toMatchInlineSnapshot(` + Object { + "announcements": Object { + "1": Object { + "date": "12/8/2020", + "id": 1, + "isShown": false, + }, + "2": Object { + "date": "12/8/2020", + "id": 2, + "isShown": false, + }, + }, + } + `); + }); + + it('persists expected state', () => { + const controller = new AnnouncementController({ + messenger: getRestrictedMessenger(), + allAnnouncements, + }); + + expect( + deriveStateFromMetadata( + controller.state, + controller.metadata, + 'persist', + ), + ).toMatchInlineSnapshot(` + Object { + "announcements": Object { + "1": Object { + "date": "12/8/2020", + "id": 1, + "isShown": false, + }, + "2": Object { + "date": "12/8/2020", + "id": 2, + "isShown": false, + }, + }, + } + `); + }); + + it('exposes expected state to UI', () => { + const controller = new AnnouncementController({ + messenger: getRestrictedMessenger(), + allAnnouncements, + }); + + expect( + deriveStateFromMetadata( + controller.state, + controller.metadata, + 'usedInUi', + ), + ).toMatchInlineSnapshot(` + Object { + "announcements": Object { + "1": Object { + "date": "12/8/2020", + "id": 1, + "isShown": false, + }, + "2": Object { + "date": "12/8/2020", + "id": 2, + "isShown": false, + }, + }, + } + `); + }); + }); }); diff --git a/packages/announcement-controller/src/AnnouncementController.ts b/packages/announcement-controller/src/AnnouncementController.ts index 8bb1bb35c65..66f9858031a 100644 --- a/packages/announcement-controller/src/AnnouncementController.ts +++ b/packages/announcement-controller/src/AnnouncementController.ts @@ -2,6 +2,7 @@ import type { ControllerGetStateAction, ControllerStateChangeEvent, RestrictedMessenger, + StateMetadata, } from '@metamask/base-controller'; import { BaseController } from '@metamask/base-controller'; @@ -59,10 +60,12 @@ const defaultState = { announcements: {}, }; -const metadata = { +const metadata: StateMetadata = { announcements: { + includeInStateLogs: true, persist: true, anonymous: true, + usedInUi: true, }, };