mirror of
https://github.com/colanode/colanode.git
synced 2026-02-24 11:59:53 +01:00
106 lines
2.6 KiB
TypeScript
106 lines
2.6 KiB
TypeScript
import { afterAll, beforeAll, describe, expect, it } from 'vitest';
|
|
|
|
import { ApiHeader, UserStatus } from '@colanode/core';
|
|
import { database } from '@colanode/server/data/database';
|
|
import { buildTestApp } from '../helpers/app';
|
|
import {
|
|
buildAuthHeader,
|
|
createAccount,
|
|
createDevice,
|
|
createUser,
|
|
createWorkspace,
|
|
} from '../helpers/seed';
|
|
|
|
const CLIENT_PLATFORM = 'test-platform';
|
|
const CLIENT_VERSION = '1.2.3';
|
|
const CLIENT_TYPE = 'web';
|
|
const CLIENT_IP = '203.0.113.10';
|
|
|
|
const app = buildTestApp();
|
|
|
|
beforeAll(async () => {
|
|
await app.ready();
|
|
});
|
|
|
|
afterAll(async () => {
|
|
await app.close();
|
|
});
|
|
|
|
describe('POST /client/v1/accounts/sync', () => {
|
|
it('returns only active workspaces and updates device metadata', async () => {
|
|
const account = await createAccount({
|
|
email: 'sync@example.com',
|
|
password: 'Password123!',
|
|
});
|
|
|
|
const workspace = await createWorkspace({
|
|
createdBy: account.id,
|
|
});
|
|
|
|
await createUser({
|
|
workspaceId: workspace.id,
|
|
account,
|
|
role: 'owner',
|
|
});
|
|
|
|
const hiddenWorkspace = await createWorkspace({
|
|
createdBy: account.id,
|
|
name: 'Hidden Workspace',
|
|
});
|
|
|
|
await createUser({
|
|
workspaceId: hiddenWorkspace.id,
|
|
account,
|
|
role: 'none',
|
|
});
|
|
|
|
const removedWorkspace = await createWorkspace({
|
|
createdBy: account.id,
|
|
name: 'Removed Workspace',
|
|
});
|
|
|
|
await createUser({
|
|
workspaceId: removedWorkspace.id,
|
|
account,
|
|
role: 'collaborator',
|
|
status: UserStatus.Removed,
|
|
});
|
|
|
|
const { device, token } = await createDevice({ accountId: account.id });
|
|
|
|
const response = await app.inject({
|
|
method: 'POST',
|
|
url: '/client/v1/accounts/sync',
|
|
headers: {
|
|
...buildAuthHeader(token),
|
|
[ApiHeader.ClientPlatform]: CLIENT_PLATFORM,
|
|
[ApiHeader.ClientVersion]: CLIENT_VERSION,
|
|
[ApiHeader.ClientType]: CLIENT_TYPE,
|
|
'x-forwarded-for': CLIENT_IP,
|
|
},
|
|
});
|
|
|
|
expect(response.statusCode).toBe(200);
|
|
|
|
const body = response.json() as {
|
|
account: { id: string };
|
|
workspaces: { id: string }[];
|
|
};
|
|
|
|
expect(body.account.id).toBe(account.id);
|
|
expect(body.workspaces).toHaveLength(1);
|
|
expect(body.workspaces[0]?.id).toBe(workspace.id);
|
|
|
|
const updatedDevice = await database
|
|
.selectFrom('devices')
|
|
.selectAll()
|
|
.where('id', '=', device.id)
|
|
.executeTakeFirst();
|
|
|
|
expect(updatedDevice?.synced_at).not.toBeNull();
|
|
expect(updatedDevice?.platform).toBe(CLIENT_PLATFORM);
|
|
expect(updatedDevice?.version).toBe(CLIENT_VERSION);
|
|
expect(updatedDevice?.ip).toBe(CLIENT_IP);
|
|
});
|
|
});
|