added more fields to a bazaar project

Signed-off-by: Lykke Axlin <lykkeaxlin@hotmail.com>

Co-authored-by: klaraab <klarabroman@live.se>
This commit is contained in:
Lykke Axlin
2021-11-09 15:08:22 +01:00
parent fc84dda0b6
commit 57c24468ba
20 changed files with 446 additions and 106 deletions
@@ -18,14 +18,17 @@ import { DatabaseHandler } from './DatabaseHandler';
import { TestDatabaseId, TestDatabases } from '@backstage/backend-test-utils';
const bazaarProject: any = {
name: 'name',
entityRef: 'ref',
name: 'n1',
entityRef: 'ref1',
community: '',
status: 'proposed',
announcement: 'a',
membersCount: 0,
startDate: '2021-11-07T13:27:00.000Z',
endDate: null,
size: 'small',
responsible: 'r',
};
describe('DatabaseHandler', () => {
const databases = TestDatabases.create({
ids: ['POSTGRES_13', 'POSTGRES_9', 'SQLITE_3'],
@@ -33,18 +36,40 @@ describe('DatabaseHandler', () => {
async function createDatabaseHandler(databaseId: TestDatabaseId) {
const knex = await databases.init(databaseId);
return await DatabaseHandler.create({ database: knex });
return {
knex,
dbHandler: await DatabaseHandler.create({ database: knex }),
};
}
it.each(databases.eachSupportedId())(
'should do a full sync with the locations on connect, %p',
'should insert and get entity, %p',
async databaseId => {
const db = await createDatabaseHandler(databaseId);
await db.insertMetadata(bazaarProject);
const { knex, dbHandler } = await createDatabaseHandler(databaseId);
const entities = await db.getEntities();
expect(entities.length).toEqual(1);
expect(entities[0].entity_ref).toEqual(bazaarProject.entityRef);
await knex('metadata').insert({
entity_ref: bazaarProject.entityRef,
name: bazaarProject.name,
announcement: bazaarProject.announcement,
community: bazaarProject.community,
status: bazaarProject.status,
updated_at: new Date().toISOString(),
start_date: bazaarProject.startDate,
end_date: bazaarProject.endDate,
size: bazaarProject.size,
responsible: bazaarProject.responsible,
});
const res = await dbHandler.getMetadata('ref1');
expect(res).toHaveLength(1);
expect(res[0].announcement).toEqual('a');
expect(res[0].community).toEqual('');
expect(res[0].status).toEqual('proposed');
expect(res[0].start_date).toEqual('2021-11-07T13:27:00.000Z');
expect(res[0].end_date).toEqual(null);
expect(res[0].size).toEqual('small');
expect(res[0].responsible).toEqual('r');
},
60_000,
);
@@ -43,6 +43,20 @@ export class DatabaseHandler {
this.database = options.database;
}
private columns = [
'members.entity_ref',
'metadata.entity_ref',
'metadata.name',
'metadata.announcement',
'metadata.status',
'metadata.updated_at',
'metadata.community',
'metadata.size',
'metadata.start_date',
'metadata.end_date',
'metadata.responsible',
];
async getMembers(entityRef: string) {
return await this.database
.select('*')
@@ -72,25 +86,25 @@ export class DatabaseHandler {
'coalesce(count(members.entity_ref), 0) as members_count',
);
const columns = [
'members.entity_ref',
'metadata.entity_ref',
'metadata.name',
'metadata.announcement',
'metadata.status',
'metadata.updated_at',
'metadata.community',
];
return await this.database('metadata')
.select([...columns, coalesce])
.select([...this.columns, coalesce])
.where({ 'metadata.entity_ref': entityRef })
.groupBy(columns)
.groupBy(this.columns)
.leftJoin('members', 'metadata.entity_ref', '=', 'members.entity_ref');
}
async insertMetadata(bazaarProject: any) {
const { name, entityRef, community, announcement, status } = bazaarProject;
const {
name,
entityRef,
community,
announcement,
status,
size,
startDate,
endDate,
responsible,
} = bazaarProject;
await this.database
.insert({
@@ -100,12 +114,25 @@ export class DatabaseHandler {
announcement: announcement,
status: status,
updated_at: new Date().toISOString(),
size,
start_date: startDate,
end_date: endDate,
responsible,
})
.into('metadata');
}
async updateMetadata(bazaarProject: any) {
const { entityRef, community, announcement, status } = bazaarProject;
const {
entityRef,
community,
announcement,
status,
size,
startDate,
endDate,
responsible,
} = bazaarProject;
return await this.database('metadata')
.where({ entity_ref: entityRef })
@@ -114,6 +141,10 @@ export class DatabaseHandler {
community: community,
status: status,
updated_at: new Date().toISOString(),
size,
start_date: startDate,
end_date: endDate,
responsible,
});
}
@@ -128,18 +159,9 @@ export class DatabaseHandler {
'coalesce(count(members.entity_ref), 0) as members_count',
);
const columns = [
'members.entity_ref',
'metadata.entity_ref',
'metadata.name',
'metadata.announcement',
'metadata.status',
'metadata.updated_at',
'metadata.community',
];
return await this.database('metadata')
.select([...columns, coalesce])
.groupBy(columns)
.select([...this.columns, coalesce])
.groupBy(this.columns)
.leftJoin('members', 'metadata.entity_ref', '=', 'members.entity_ref');
}
}