Skip to content

Commit 0f6cd97

Browse files
committed
test(mothership): cover a successful external collaborator removal
1 parent 7416a7f commit 0f6cd97

1 file changed

Lines changed: 26 additions & 5 deletions

File tree

‎apps/sim/lib/mothership/memories/offboarding.integration.ts‎

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { db } from '@sim/db'
2-
import { member, organization, outboxEvent, user } from '@sim/db/schema'
2+
import { member, organization, outboxEvent, permissions, user, workspace } from '@sim/db/schema'
33
import { readTestDatabaseUrl } from '@sim/db/testing/test-infrastructure'
4+
import { deleteWorkspaceFixture, insertWorkspaceFixture } from '@sim/db/testing/workspace-fixtures'
45
import { generateId } from '@sim/utils/id'
56
import { and, eq, inArray, sql } from 'drizzle-orm'
67
import { afterAll, beforeAll, expect, it } from 'vitest'
@@ -12,6 +13,7 @@ const memberId = generateId()
1213
const externalId = generateId()
1314
const organizationId = generateId()
1415
const membershipId = generateId()
16+
const workspaceId = generateId()
1517
let runtime: {
1618
membership: typeof import('@/lib/billing/organizations/membership')
1719
resources: typeof import('@/lib/organizations/resource-cleanup')
@@ -45,6 +47,22 @@ beforeAll(async () => {
4547
{ id: generateId(), organizationId, userId: ownerId, role: 'owner', createdAt: new Date() },
4648
{ id: membershipId, organizationId, userId: memberId, role: 'member', createdAt: new Date() },
4749
])
50+
// The external collaborator works in one of the organization's workspaces without membership.
51+
await insertWorkspaceFixture(db, {
52+
id: workspaceId,
53+
name: 'Offboarding',
54+
ownerId,
55+
billedAccountUserId: ownerId,
56+
organizationId,
57+
workspaceMode: 'organization',
58+
})
59+
await db.insert(permissions).values({
60+
id: generateId(),
61+
userId: externalId,
62+
entityType: 'workspace',
63+
entityId: workspaceId,
64+
permissionType: 'write',
65+
})
4866
}, 60_000)
4967

5068
afterAll(async () => {
@@ -56,6 +74,7 @@ afterAll(async () => {
5674
sql`${outboxEvent.payload}->'request'->'target'->>'organizationId' = ${organizationId}`
5775
)
5876
)
77+
await deleteWorkspaceFixture(db, eq(workspace.id, workspaceId))
5978
await db.delete(organization).where(eq(organization.id, organizationId))
6079
await db.delete(user).where(inArray(user.id, [ownerId, memberId, externalId]))
6180
})
@@ -101,10 +120,12 @@ it('queues private memory erasure with each committed departure and organization
101120
skipBillingLogic: true,
102121
onError: 'throw',
103122
})
104-
await runtime.membership.removeExternalUserFromOrganizationWorkspaces({
105-
organizationId,
106-
userId: externalId,
107-
})
123+
expect(
124+
await runtime.membership.removeExternalUserFromOrganizationWorkspaces({
125+
organizationId,
126+
userId: externalId,
127+
})
128+
).toMatchObject({ success: true, workspaceAccessRevoked: 1 })
108129
expect(await queued()).toEqual(
109130
[`organization_member:${externalId}`, `organization_member:${memberId}`].sort()
110131
)

0 commit comments

Comments
 (0)