Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: fix features e2e test #2296

Merged
merged 1 commit into from Apr 6, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
149 changes: 85 additions & 64 deletions packages/snjs/lib/Services/Features/FeaturesService.spec.ts
Expand Up @@ -170,8 +170,8 @@ describe('featuresService', () => {
featuresService.getExperimentalFeatures = jest.fn().mockReturnValue([FeatureIdentifier.PlusEditor])

featuresService.initializeFromDisk()
await featuresService.updateOnlineRoles(newRoles)
await featuresService.fetchFeatures('123')
const { didChangeRoles } = await featuresService.updateOnlineRoles(newRoles)
await featuresService.fetchFeatures('123', didChangeRoles)

expect(itemManager.createItem).not.toHaveBeenCalled()
})
Expand All @@ -193,8 +193,8 @@ describe('featuresService', () => {
featuresService.getEnabledExperimentalFeatures = jest.fn().mockReturnValue([FeatureIdentifier.PlusEditor])

featuresService.initializeFromDisk()
await featuresService.updateOnlineRoles(newRoles)
await featuresService.fetchFeatures('123')
const { didChangeRoles } = await featuresService.updateOnlineRoles(newRoles)
await featuresService.fetchFeatures('123', didChangeRoles)

expect(itemManager.createItem).toHaveBeenCalled()
})
Expand Down Expand Up @@ -230,8 +230,8 @@ describe('featuresService', () => {
const spy = jest.spyOn(featuresService, 'notifyEvent' as never)

const newRoles = [...roles, RoleName.NAMES.ProUser]
await featuresService.updateOnlineRoles(newRoles)
await featuresService.fetchFeatures('123')
const { didChangeRoles } = await featuresService.updateOnlineRoles(newRoles)
await featuresService.fetchFeatures('123', didChangeRoles)

expect(spy.mock.calls[0][0]).toEqual(FeaturesEvent.DidPurchaseSubscription)
})
Expand All @@ -245,8 +245,8 @@ describe('featuresService', () => {
const spy = jest.spyOn(featuresService, 'notifyEvent' as never)

const newRoles = [...roles, RoleName.NAMES.ProUser]
await featuresService.updateOnlineRoles(newRoles)
await featuresService.fetchFeatures('123')
const { didChangeRoles } = await featuresService.updateOnlineRoles(newRoles)
await featuresService.fetchFeatures('123', didChangeRoles)

const triggeredEvents = spy.mock.calls.map((call) => call[0])
expect(triggeredEvents).not.toContain(FeaturesEvent.DidPurchaseSubscription)
Expand All @@ -259,10 +259,10 @@ describe('featuresService', () => {
const featuresService = createService()
featuresService.initializeFromDisk()

await featuresService.updateOnlineRoles(newRoles)
const { didChangeRoles } = await featuresService.updateOnlineRoles(newRoles)
expect(storageService.setValue).toHaveBeenCalledWith(StorageKey.UserRoles, newRoles)

await featuresService.fetchFeatures('123')
await featuresService.fetchFeatures('123', didChangeRoles)
expect(apiService.getUserFeatures).toHaveBeenCalledWith('123')
})

Expand All @@ -272,8 +272,8 @@ describe('featuresService', () => {
storageService.getValue = jest.fn().mockReturnValue(roles)
const featuresService = createService()
featuresService.initializeFromDisk()
await featuresService.updateOnlineRoles(newRoles)
await featuresService.fetchFeatures('123')
const { didChangeRoles } = await featuresService.updateOnlineRoles(newRoles)
await featuresService.fetchFeatures('123', didChangeRoles)

expect(storageService.setValue).toHaveBeenCalledWith(StorageKey.UserRoles, newRoles)
expect(apiService.getUserFeatures).toHaveBeenCalledWith('123')
Expand All @@ -285,8 +285,8 @@ describe('featuresService', () => {
storageService.getValue = jest.fn().mockReturnValue(roles)
const featuresService = createService()
featuresService.initializeFromDisk()
await featuresService.updateOnlineRoles(newRoles)
await featuresService.fetchFeatures('123')
const { didChangeRoles } = await featuresService.updateOnlineRoles(newRoles)
await featuresService.fetchFeatures('123', didChangeRoles)

expect(storageService.setValue).toHaveBeenCalledWith(StorageKey.UserFeatures, features)
})
Expand All @@ -297,8 +297,8 @@ describe('featuresService', () => {
storageService.getValue = jest.fn().mockReturnValue(roles)
const featuresService = createService()
featuresService.initializeFromDisk()
await featuresService.updateOnlineRoles(newRoles)
await featuresService.fetchFeatures('123')
const { didChangeRoles } = await featuresService.updateOnlineRoles(newRoles)
await featuresService.fetchFeatures('123', didChangeRoles)

expect(itemManager.createItem).toHaveBeenCalledTimes(2)
expect(itemManager.createItem).toHaveBeenCalledWith(
Expand Down Expand Up @@ -343,8 +343,8 @@ describe('featuresService', () => {
itemManager.getItems = jest.fn().mockReturnValue([existingItem])
const featuresService = createService()
featuresService.initializeFromDisk()
await featuresService.updateOnlineRoles(newRoles)
await featuresService.fetchFeatures('123')
const { didChangeRoles } = await featuresService.updateOnlineRoles(newRoles)
await featuresService.fetchFeatures('123', didChangeRoles)

expect(itemManager.changeComponent).toHaveBeenCalledWith(existingItem, expect.any(Function))
})
Expand All @@ -370,8 +370,8 @@ describe('featuresService', () => {

const featuresService = createService()
featuresService.initializeFromDisk()
await featuresService.updateOnlineRoles(newRoles)
await featuresService.fetchFeatures('123')
const { didChangeRoles } = await featuresService.updateOnlineRoles(newRoles)
await featuresService.fetchFeatures('123', didChangeRoles)

expect(itemManager.createItem).toHaveBeenCalledWith(
ContentType.Component,
Expand Down Expand Up @@ -419,8 +419,8 @@ describe('featuresService', () => {

const featuresService = createService()
featuresService.initializeFromDisk()
await featuresService.updateOnlineRoles(newRoles)
await featuresService.fetchFeatures('123')
const { didChangeRoles } = await featuresService.updateOnlineRoles(newRoles)
await featuresService.fetchFeatures('123', didChangeRoles)

expect(itemManager.setItemsToBeDeleted).toHaveBeenCalledWith([existingItem])
})
Expand All @@ -444,8 +444,8 @@ describe('featuresService', () => {
storageService.getValue = jest.fn().mockReturnValue(roles)
const featuresService = createService()
featuresService.initializeFromDisk()
await featuresService.updateOnlineRoles(newRoles)
await featuresService.fetchFeatures('123')
const { didChangeRoles } = await featuresService.updateOnlineRoles(newRoles)
await featuresService.fetchFeatures('123', didChangeRoles)

expect(itemManager.createItem).not.toHaveBeenCalled()
})
Expand All @@ -469,8 +469,8 @@ describe('featuresService', () => {
storageService.getValue = jest.fn().mockReturnValue(roles)
const featuresService = createService()
featuresService.initializeFromDisk()
await featuresService.updateOnlineRoles(newRoles)
await featuresService.fetchFeatures('123')
const { didChangeRoles } = await featuresService.updateOnlineRoles(newRoles)
await featuresService.fetchFeatures('123', didChangeRoles)

expect(itemManager.createItem).not.toHaveBeenCalled()
})
Expand All @@ -479,14 +479,14 @@ describe('featuresService', () => {
storageService.getValue = jest.fn().mockReturnValue(roles)
const featuresService = createService()
featuresService.initializeFromDisk()
await featuresService.updateOnlineRoles(roles)
await featuresService.fetchFeatures('123')
await featuresService.updateOnlineRoles(roles)
await featuresService.fetchFeatures('123')
await featuresService.updateOnlineRoles(roles)
await featuresService.fetchFeatures('123')
await featuresService.updateOnlineRoles(roles)
await featuresService.fetchFeatures('123')
const { didChangeRoles: didChangeRoles1 } = await featuresService.updateOnlineRoles(roles)
await featuresService.fetchFeatures('123', didChangeRoles1)
const { didChangeRoles: didChangeRoles2 } = await featuresService.updateOnlineRoles(roles)
await featuresService.fetchFeatures('123', didChangeRoles2)
const { didChangeRoles: didChangeRoles3 } = await featuresService.updateOnlineRoles(roles)
await featuresService.fetchFeatures('123', didChangeRoles3)
const { didChangeRoles: didChangeRoles4 } = await featuresService.updateOnlineRoles(roles)
await featuresService.fetchFeatures('123', didChangeRoles4)
expect(storageService.setValue).toHaveBeenCalledTimes(2)
})

Expand All @@ -510,8 +510,8 @@ describe('featuresService', () => {
const nativeFeature = featuresService['mapRemoteNativeFeatureToStaticFeature'](remoteFeature)
featuresService['mapRemoteNativeFeatureToItem'] = jest.fn()
featuresService.initializeFromDisk()
await featuresService.updateOnlineRoles(newRoles)
await featuresService.fetchFeatures('123')
const { didChangeRoles } = await featuresService.updateOnlineRoles(newRoles)
await featuresService.fetchFeatures('123', didChangeRoles)

expect(featuresService['mapRemoteNativeFeatureToItem']).toHaveBeenCalledWith(
nativeFeature,
Expand Down Expand Up @@ -552,8 +552,11 @@ describe('featuresService', () => {

sessionManager.isSignedIntoFirstPartyServer = jest.fn().mockReturnValue(true)

await featuresService.updateOnlineRoles([RoleName.NAMES.CoreUser, RoleName.NAMES.PlusUser])
await featuresService.fetchFeatures('123')
const { didChangeRoles } = await featuresService.updateOnlineRoles([
RoleName.NAMES.CoreUser,
RoleName.NAMES.PlusUser,
])
await featuresService.fetchFeatures('123', didChangeRoles)

expect(featuresService.getFeatureStatus(FeatureIdentifier.MidnightTheme)).toBe(FeatureStatus.Entitled)
expect(featuresService.getFeatureStatus(FeatureIdentifier.SuperEditor)).toBe(FeatureStatus.Entitled)
Expand Down Expand Up @@ -585,8 +588,8 @@ describe('featuresService', () => {

sessionManager.isSignedIntoFirstPartyServer = jest.fn().mockReturnValue(true)

await featuresService.updateOnlineRoles([RoleName.NAMES.CoreUser])
await featuresService.fetchFeatures('123')
const { didChangeRoles } = await featuresService.updateOnlineRoles([RoleName.NAMES.CoreUser])
await featuresService.fetchFeatures('123', didChangeRoles)

expect(featuresService.getFeatureStatus(FeatureIdentifier.MidnightTheme)).toBe(FeatureStatus.NoUserSubscription)
expect(featuresService.getFeatureStatus(FeatureIdentifier.PlusEditor)).toBe(FeatureStatus.NoUserSubscription)
Expand All @@ -598,8 +601,8 @@ describe('featuresService', () => {

sessionManager.isSignedIntoFirstPartyServer = jest.fn().mockReturnValue(false)

await featuresService.updateOnlineRoles([RoleName.NAMES.ProUser])
await featuresService.fetchFeatures('123')
const { didChangeRoles } = await featuresService.updateOnlineRoles([RoleName.NAMES.ProUser])
await featuresService.fetchFeatures('123', didChangeRoles)

expect(featuresService.getFeatureStatus(FeatureIdentifier.SuperEditor)).toBe(FeatureStatus.NotInCurrentPlan)
})
Expand Down Expand Up @@ -648,8 +651,8 @@ describe('featuresService', () => {
} as never),
])

await featuresService.updateOnlineRoles([RoleName.NAMES.CoreUser])
await featuresService.fetchFeatures('123')
const { didChangeRoles } = await featuresService.updateOnlineRoles([RoleName.NAMES.CoreUser])
await featuresService.fetchFeatures('123', didChangeRoles)

expect(featuresService.getFeatureStatus(themeFeature.identifier)).toBe(FeatureStatus.Entitled)
expect(featuresService.getFeatureStatus(editorFeature.identifier)).toBe(FeatureStatus.InCurrentPlanButExpired)
Expand All @@ -661,8 +664,8 @@ describe('featuresService', () => {
it('feature status should be not entitled if no account or offline repo', async () => {
const featuresService = createService()

await featuresService.updateOnlineRoles([RoleName.NAMES.CoreUser])
await featuresService.fetchFeatures('123')
const { didChangeRoles } = await featuresService.updateOnlineRoles([RoleName.NAMES.CoreUser])
await featuresService.fetchFeatures('123', didChangeRoles)

sessionManager.isSignedIntoFirstPartyServer = jest.fn().mockReturnValue(false)

Expand All @@ -687,8 +690,11 @@ describe('featuresService', () => {
it('feature status for offline subscription', async () => {
const featuresService = createService()

await featuresService.updateOnlineRoles([RoleName.NAMES.CoreUser, RoleName.NAMES.PlusUser])
await featuresService.fetchFeatures('123')
const { didChangeRoles } = await featuresService.updateOnlineRoles([
RoleName.NAMES.CoreUser,
RoleName.NAMES.PlusUser,
])
await featuresService.fetchFeatures('123', didChangeRoles)

sessionManager.isSignedIntoFirstPartyServer = jest.fn().mockReturnValue(false)
featuresService.onlineRolesIncludePaidSubscription = jest.fn().mockReturnValue(false)
Expand Down Expand Up @@ -716,8 +722,11 @@ describe('featuresService', () => {
FeatureStatus.NoUserSubscription,
)

await featuresService.updateOnlineRoles([RoleName.NAMES.CoreUser, RoleName.NAMES.PlusUser])
await featuresService.fetchFeatures('123')
const { didChangeRoles } = await featuresService.updateOnlineRoles([
RoleName.NAMES.CoreUser,
RoleName.NAMES.PlusUser,
])
await featuresService.fetchFeatures('123', didChangeRoles)

expect(featuresService.getFeatureStatus(FeatureIdentifier.DeprecatedFileSafe as FeatureIdentifier)).toBe(
FeatureStatus.Entitled,
Expand All @@ -727,23 +736,26 @@ describe('featuresService', () => {
it('has paid subscription', async () => {
const featuresService = createService()

await featuresService.updateOnlineRoles([RoleName.NAMES.CoreUser])
await featuresService.fetchFeatures('123')
const { didChangeRoles: didChangeRoles1 } = await featuresService.updateOnlineRoles([RoleName.NAMES.CoreUser])
await featuresService.fetchFeatures('123', didChangeRoles1)
sessionManager.isSignedIntoFirstPartyServer = jest.fn().mockReturnValue(true)

expect(featuresService.hasPaidAnyPartyOnlineOrOfflineSubscription()).toBeFalsy

await featuresService.updateOnlineRoles([RoleName.NAMES.CoreUser, RoleName.NAMES.PlusUser])
await featuresService.fetchFeatures('123')
const { didChangeRoles: didChangeRoles2 } = await featuresService.updateOnlineRoles([
RoleName.NAMES.CoreUser,
RoleName.NAMES.PlusUser,
])
await featuresService.fetchFeatures('123', didChangeRoles2)

expect(featuresService.hasPaidAnyPartyOnlineOrOfflineSubscription()).toEqual(true)
})

it('has paid subscription should be true if offline repo and signed into third party server', async () => {
const featuresService = createService()

await featuresService.updateOnlineRoles([RoleName.NAMES.CoreUser])
await featuresService.fetchFeatures('123')
const { didChangeRoles } = await featuresService.updateOnlineRoles([RoleName.NAMES.CoreUser])
await featuresService.fetchFeatures('123', didChangeRoles)

featuresService.hasOfflineRepo = jest.fn().mockReturnValue(true)
sessionManager.isSignedIntoFirstPartyServer = jest.fn().mockReturnValue(false)
Expand Down Expand Up @@ -833,8 +845,8 @@ describe('featuresService', () => {
it('should be false if core user checks for plus role', async () => {
const featuresService = createService()

await featuresService.updateOnlineRoles([RoleName.NAMES.CoreUser])
await featuresService.fetchFeatures('123')
const { didChangeRoles } = await featuresService.updateOnlineRoles([RoleName.NAMES.CoreUser])
await featuresService.fetchFeatures('123', didChangeRoles)

const hasPlusUserRole = featuresService.hasMinimumRole(RoleName.NAMES.PlusUser)

Expand All @@ -846,8 +858,11 @@ describe('featuresService', () => {

sessionManager.isSignedIntoFirstPartyServer = jest.fn().mockReturnValue(true)

await featuresService.updateOnlineRoles([RoleName.NAMES.PlusUser, RoleName.NAMES.CoreUser])
await featuresService.fetchFeatures('123')
const { didChangeRoles } = await featuresService.updateOnlineRoles([
RoleName.NAMES.PlusUser,
RoleName.NAMES.CoreUser,
])
await featuresService.fetchFeatures('123', didChangeRoles)

const hasProUserRole = featuresService.hasMinimumRole(RoleName.NAMES.ProUser)

Expand All @@ -859,8 +874,11 @@ describe('featuresService', () => {

sessionManager.isSignedIntoFirstPartyServer = jest.fn().mockReturnValue(true)

await featuresService.updateOnlineRoles([RoleName.NAMES.ProUser, RoleName.NAMES.PlusUser])
await featuresService.fetchFeatures('123')
const { didChangeRoles } = await featuresService.updateOnlineRoles([
RoleName.NAMES.ProUser,
RoleName.NAMES.PlusUser,
])
await featuresService.fetchFeatures('123', didChangeRoles)

const hasCoreUserRole = featuresService.hasMinimumRole(RoleName.NAMES.CoreUser)

Expand All @@ -872,8 +890,11 @@ describe('featuresService', () => {

sessionManager.isSignedIntoFirstPartyServer = jest.fn().mockReturnValue(true)

await featuresService.updateOnlineRoles([RoleName.NAMES.ProUser, RoleName.NAMES.PlusUser])
await featuresService.fetchFeatures('123')
const { didChangeRoles } = await featuresService.updateOnlineRoles([
RoleName.NAMES.ProUser,
RoleName.NAMES.PlusUser,
])
await featuresService.fetchFeatures('123', didChangeRoles)

const hasProUserRole = featuresService.hasMinimumRole(RoleName.NAMES.ProUser)

Expand Down