mirror of
https://github.com/immich-app/yucca.git
synced 2026-09-30 13:33:00 +08:00
test: assert repository metric timestamps come back as dates
This commit is contained in:
@@ -132,4 +132,32 @@ describe('RepositoryController (e2e)', () => {
|
||||
describe('DELETE /repository/:id', () => {
|
||||
it.todo('deletes a repository');
|
||||
});
|
||||
|
||||
describe('repository queries', () => {
|
||||
it('returns metric timestamps as Date instances', async () => {
|
||||
const owner = await testUtils.createUser({ name: 'owner' });
|
||||
const repository = await testUtils.createRepository(owner.id);
|
||||
await testUtils.setRepositoryMetrics(repository.id);
|
||||
const repositories = testUtils.getRepositoryRepository();
|
||||
|
||||
const row = await repositories.get(repository.id);
|
||||
|
||||
expect(row.metrics.lastStarted).toBeInstanceOf(Date);
|
||||
expect(row.metrics.lastBackup).toBeInstanceOf(Date);
|
||||
expect(row.metrics.lastSuccessfulBackup).toBeInstanceOf(Date);
|
||||
expect(typeof row.metrics.sizeBytes).toBe('number');
|
||||
});
|
||||
|
||||
it('returns metric timestamps as Date instances when listing', async () => {
|
||||
const owner = await testUtils.createUser({ name: 'owner' });
|
||||
const repository = await testUtils.createRepository(owner.id);
|
||||
await testUtils.setRepositoryMetrics(repository.id);
|
||||
|
||||
const page = await testUtils.getRepositoryRepository().list({ limit: 10 });
|
||||
|
||||
expect(page.items).toHaveLength(1);
|
||||
expect(page.items[0].id).toBe(repository.id);
|
||||
expect(page.items[0].metrics.lastBackup).toBeInstanceOf(Date);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { Kysely } from 'kysely';
|
||||
import { randomUUID } from 'node:crypto';
|
||||
import { RepositoryRepository } from 'src/repositories/repository.repository';
|
||||
import { DB } from 'src/schema';
|
||||
import { getKyselyConfig } from 'src/utils/database';
|
||||
|
||||
@@ -108,6 +109,31 @@ export const testUtils = {
|
||||
.executeTakeFirstOrThrow();
|
||||
},
|
||||
|
||||
setRepositoryMetrics: (
|
||||
repositoryId: string,
|
||||
{
|
||||
sizeBytes = 4096,
|
||||
lastStarted = new Date(),
|
||||
lastBackup = new Date(),
|
||||
lastSuccessfulBackup = new Date(),
|
||||
lastBackupDuration = 1234,
|
||||
}: Partial<{
|
||||
sizeBytes: number;
|
||||
lastStarted: Date;
|
||||
lastBackup: Date;
|
||||
lastSuccessfulBackup: Date;
|
||||
lastBackupDuration: number;
|
||||
}> = {},
|
||||
) => {
|
||||
return getDb()
|
||||
.insertInto('repositoryMetrics')
|
||||
.values({ id: repositoryId, sizeBytes, lastStarted, lastBackup, lastSuccessfulBackup, lastBackupDuration })
|
||||
.returningAll()
|
||||
.executeTakeFirstOrThrow();
|
||||
},
|
||||
|
||||
getRepositoryRepository: () => new RepositoryRepository(getDb()),
|
||||
|
||||
getUser: (id: string) => {
|
||||
return getDb().selectFrom('users').selectAll().where('id', '=', id).executeTakeFirst();
|
||||
},
|
||||
|
||||
@@ -369,4 +369,42 @@ describe('RepositoryController (e2e)', () => {
|
||||
await expect(testUtils.getRepository(worm.id)).resolves.toEqual(expect.objectContaining({ worm: true }));
|
||||
});
|
||||
});
|
||||
|
||||
describe('repository queries', () => {
|
||||
it('returns metric timestamps as Date instances', async () => {
|
||||
await testUtils.setRepositoryMetrics(repository.id);
|
||||
await testUtils.setRepositoryMeter(repository.id);
|
||||
const repositories = testUtils.getRepositoryRepository();
|
||||
|
||||
const row = await repositories.get(repository.id);
|
||||
|
||||
expect(row.metrics.lastBackup).toBeInstanceOf(Date);
|
||||
expect(row.metrics.lastSuccessfulBackup).toBeInstanceOf(Date);
|
||||
expect(typeof row.metrics.sizeBytes).toBe('number');
|
||||
expect(row.meter.lastUpdated).toBeInstanceOf(Date);
|
||||
expect(typeof row.meter.sizeBytes).toBe('number');
|
||||
expect(typeof row.meter.objectCount).toBe('number');
|
||||
});
|
||||
|
||||
it('returns metric timestamps as Date instances for a user listing', async () => {
|
||||
await testUtils.setRepositoryMetrics(repository.id);
|
||||
await testUtils.setRepositoryMeter(repository.id);
|
||||
|
||||
const [row] = await testUtils.getRepositoryRepository().getByUser(user.id);
|
||||
|
||||
expect(row.metrics.lastBackup).toBeInstanceOf(Date);
|
||||
expect(row.meter.lastUpdated).toBeInstanceOf(Date);
|
||||
});
|
||||
|
||||
it('returns metric timestamps as Date instances for an active ticket', async () => {
|
||||
await testUtils.setRepositoryMetrics(repository.id);
|
||||
await testUtils.setRepositoryMeter(repository.id);
|
||||
const ticket = await testUtils.createActiveTicket(user.id, repository.id, TicketAction.DeleteRepository);
|
||||
|
||||
const active = await testUtils.getTicketRepository().getActive(ticket.id, ticket.token);
|
||||
|
||||
expect(active?.metrics.lastBackup).toBeInstanceOf(Date);
|
||||
expect(active?.meter.lastUpdated).toBeInstanceOf(Date);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -4,6 +4,7 @@ import { ConnectionRepository } from 'src/repositories/connection.repository';
|
||||
import { CryptoRepository } from 'src/repositories/crypto.repository';
|
||||
import { RepositoryRepository } from 'src/repositories/repository.repository';
|
||||
import { SessionRepository } from 'src/repositories/session.repository';
|
||||
import { TicketRepository } from 'src/repositories/ticket.repository';
|
||||
import { UserRepository } from 'src/repositories/user.repository';
|
||||
import { DB } from 'src/schema';
|
||||
import { getKyselyConfig } from 'src/utils/database';
|
||||
@@ -160,6 +161,48 @@ export const testUtils = {
|
||||
return getDb().selectFrom('repositories').selectAll().where('id', '=', id).executeTakeFirst();
|
||||
},
|
||||
|
||||
setRepositoryMetrics: (
|
||||
repositoryId: string,
|
||||
{
|
||||
sizeBytes = 4096,
|
||||
lastStarted = new Date(),
|
||||
lastBackup = new Date(),
|
||||
lastSuccessfulBackup = new Date(),
|
||||
lastBackupDuration = 1234,
|
||||
}: Partial<{
|
||||
sizeBytes: number;
|
||||
lastStarted: Date;
|
||||
lastBackup: Date;
|
||||
lastSuccessfulBackup: Date;
|
||||
lastBackupDuration: number;
|
||||
}> = {},
|
||||
) => {
|
||||
return getDb()
|
||||
.insertInto('repositoryMetrics')
|
||||
.values({ id: repositoryId, sizeBytes, lastStarted, lastBackup, lastSuccessfulBackup, lastBackupDuration })
|
||||
.returningAll()
|
||||
.executeTakeFirstOrThrow();
|
||||
},
|
||||
|
||||
setRepositoryMeter: (
|
||||
repositoryId: string,
|
||||
{
|
||||
sizeBytes = 8192,
|
||||
objectCount = 12,
|
||||
storageClusterCode = 'local-dev',
|
||||
}: Partial<{ sizeBytes: number; objectCount: number; storageClusterCode: string }> = {},
|
||||
) => {
|
||||
return getDb()
|
||||
.insertInto('repositoryMeter')
|
||||
.values({ repositoryId, sizeBytes, objectCount, storageClusterCode })
|
||||
.returningAll()
|
||||
.executeTakeFirstOrThrow();
|
||||
},
|
||||
|
||||
getRepositoryRepository: () => new RepositoryRepository(getDb()),
|
||||
|
||||
getTicketRepository: () => new TicketRepository(getDb()),
|
||||
|
||||
createRepository: async (userId: string, name = 'My Repository', worm = false) => {
|
||||
const db = getDb();
|
||||
const repositoryRepository = new RepositoryRepository(db);
|
||||
|
||||
Reference in New Issue
Block a user