Release 0.5.8
This commit is contained in:
1 parent
22ae3a68d6
commit
2851c7d936
33 files changed
+1263
-272
No files matched your search
@@ -9,6 +9,7 @@ import {
|
||||
addPieceUsage,
|
||||
addShowSection,
|
||||
createShow,
|
||||
createAndAddPieceUsage,
|
||||
duplicatePieceUsage,
|
||||
getPieceUsageContexts,
|
||||
getShow,
|
||||
@@ -44,6 +45,7 @@ function editedUsage(usage: PieceUsage, overrides: Partial<PieceUsage> = {}) {
|
||||
const edited = { ...usage, ...overrides };
|
||||
return {
|
||||
title: edited.title,
|
||||
outputTitle: edited.outputTitle,
|
||||
intro: edited.intro,
|
||||
research: edited.research,
|
||||
moderation: edited.moderation,
|
||||
@@ -63,6 +65,64 @@ function editedUsage(usage: PieceUsage, overrides: Partial<PieceUsage> = {}) {
|
||||
}
|
||||
|
||||
describe('show builder data layer', () => {
|
||||
it('creates a fundus original and usage atomically and idempotently', () => {
|
||||
const created = createShow({ title: 'Direkte Planung', startsAtUtc: null, templateId: null });
|
||||
const section = addShowSection(created.id, created.revision, {
|
||||
name: 'Ablauf',
|
||||
categoryId: null,
|
||||
explicitDurationSeconds: null
|
||||
});
|
||||
const before = (
|
||||
getDatabase().prepare('SELECT count(*) AS count FROM pieces').get() as { count: number }
|
||||
).count;
|
||||
const first = createAndAddPieceUsage(created.id, section.revision, 'new-piece-command', {
|
||||
title: 'Direkt geplantes Piece',
|
||||
templateId: 'talk',
|
||||
sectionId: section.id
|
||||
});
|
||||
const repeated = createAndAddPieceUsage(created.id, section.revision, 'new-piece-command', {
|
||||
title: 'Darf nicht doppelt entstehen',
|
||||
templateId: 'blank',
|
||||
sectionId: section.id
|
||||
});
|
||||
expect(repeated).toEqual({ ...first, duplicate: true });
|
||||
expect(getShow(created.id)?.sections[0].usages).toHaveLength(1);
|
||||
expect(getPiece(first.pieceId)).toMatchObject({
|
||||
title: 'Direkt geplantes Piece',
|
||||
status: 'ready',
|
||||
formatId: 'format-talk'
|
||||
});
|
||||
expect(
|
||||
(getDatabase().prepare('SELECT count(*) AS count FROM pieces').get() as { count: number })
|
||||
.count
|
||||
).toBe(before + 1);
|
||||
|
||||
expect(() =>
|
||||
createAndAddPieceUsage(created.id, first.revision, 'failing-command', {
|
||||
title: 'Rollback',
|
||||
templateId: 'blank',
|
||||
sectionId: 'missing'
|
||||
})
|
||||
).toThrow('NOT_FOUND');
|
||||
expect(
|
||||
(getDatabase().prepare('SELECT count(*) AS count FROM pieces').get() as { count: number })
|
||||
.count
|
||||
).toBe(before + 1);
|
||||
|
||||
const removed = removePieceUsage(created.id, first.usageId, first.revision);
|
||||
const afterRemoval = createAndAddPieceUsage(created.id, removed.revision, 'new-piece-command', {
|
||||
title: 'Darf auch nach dem Entfernen nicht neu entstehen',
|
||||
templateId: 'blank',
|
||||
sectionId: section.id
|
||||
});
|
||||
expect(afterRemoval).toEqual({ ...first, duplicate: true });
|
||||
expect(getShow(created.id)?.sections[0].usages).toHaveLength(0);
|
||||
expect(
|
||||
(getDatabase().prepare('SELECT count(*) AS count FROM pieces').get() as { count: number })
|
||||
.count
|
||||
).toBe(before + 1);
|
||||
});
|
||||
|
||||
it('creates blank and templated shows with independent sections and reserve banks', () => {
|
||||
const templatesBefore = listShowTemplates();
|
||||
expect(
|
||||
@@ -360,7 +420,8 @@ describe('show builder data layer', () => {
|
||||
.run('https://youtu.be/dQw4w9WgXcQ');
|
||||
getDatabase()
|
||||
.prepare(
|
||||
`UPDATE pieces SET presentation_mode = 'video', presentation_source_position = 0,
|
||||
`UPDATE pieces SET output_title = 'Öffentlicher Ausgabetitel',
|
||||
presentation_mode = 'video', presentation_source_position = 0,
|
||||
presentation_title = 'Gespeicherte Vorschau', presentation_description = 'Erster Stand',
|
||||
presentation_site_name = 'YouTube', presentation_provider = 'youtube',
|
||||
presentation_provider_id = 'dQw4w9WgXcQ' WHERE id = 'piece-console'`
|
||||
@@ -378,6 +439,7 @@ describe('show builder data layer', () => {
|
||||
});
|
||||
let usage = getShow(show.id)!.sections[0].usages[0];
|
||||
expect(usage).toMatchObject({
|
||||
outputTitle: 'Öffentlicher Ausgabetitel',
|
||||
presentationMode: 'video',
|
||||
presentationSourceUrl: 'https://youtu.be/dQw4w9WgXcQ',
|
||||
presentationSourceTimecodeSeconds: 75,
|
||||
|
||||
Reference in new issue
Block a user