tests: add Playwright event badge CRUD + interaction tests; add minimal V3 mocks and env helper; update presenter/badge smoke tests to use helpers; convert test locals to snake_case
This commit is contained in:
97
src/lib/ae_events/ae_events__event_badge.spec.ts
Normal file
97
src/lib/ae_events/ae_events__event_badge.spec.ts
Normal file
@@ -0,0 +1,97 @@
|
||||
import { describe, it, expect, vi } from 'vitest';
|
||||
|
||||
// Use hoist-safe factories for vi.mock
|
||||
vi.mock('$lib/api/api', () => ({
|
||||
api: {
|
||||
create_nested_obj_v3: vi.fn(),
|
||||
update_nested_obj_v3: vi.fn(),
|
||||
delete_nested_ae_obj_v3: vi.fn(),
|
||||
search_ae_obj_v3: vi.fn()
|
||||
}
|
||||
}));
|
||||
vi.mock('$lib/ae_core/core__idb_dexie', () => ({ db_save_ae_obj_li__ae_obj: vi.fn() }));
|
||||
vi.mock('$lib/ae_events/db_events', () => ({ db_events: { badge: { get: vi.fn(), delete: vi.fn() } } }));
|
||||
vi.mock('$lib/ae_events/ae_events__event_badge_template', () => ({ load_ae_obj_id__event_badge_template: vi.fn() }));
|
||||
|
||||
import { create_ae_obj__event_badge } from './ae_events__event_badge';
|
||||
|
||||
describe('create_ae_obj__event_badge', () => {
|
||||
it('calls api.create_nested_obj_v3 with the correct params and returns the result', async () => {
|
||||
const mocked = await import('$lib/api/api');
|
||||
const mockCreateNested = mocked.api.create_nested_obj_v3 as jest.MockedFunction<any>;
|
||||
|
||||
const fakeResult = { event_badge_id: 'eb123', full_name: 'Test User' };
|
||||
mockCreateNested.mockResolvedValue(fakeResult);
|
||||
|
||||
const api_cfg = { base_url: 'http://localhost', headers: {} };
|
||||
const event_id = 'evt1';
|
||||
const data_kv = { full_name_override: 'Test User', email: 't@example.com' };
|
||||
|
||||
const result = await create_ae_obj__event_badge({ api_cfg, event_id, data_kv, try_cache: false });
|
||||
|
||||
expect(mockCreateNested).toHaveBeenCalled();
|
||||
const calledWith = mockCreateNested.mock.calls[0][0];
|
||||
expect(calledWith.parent_type).toBe('event');
|
||||
expect(calledWith.parent_id).toBe(event_id);
|
||||
expect(calledWith.child_type).toBe('event_badge');
|
||||
expect(calledWith.fields).toEqual(data_kv);
|
||||
|
||||
expect(result).toEqual(fakeResult);
|
||||
});
|
||||
});
|
||||
|
||||
describe('update_ae_obj__event_badge', () => {
|
||||
it('calls api.update_nested_obj_v3 with correct params and returns result', async () => {
|
||||
const mocked = await import('$lib/api/api');
|
||||
const mockUpdate = mocked.api.update_nested_obj_v3 as jest.MockedFunction<any>;
|
||||
const fakeResult = { event_badge_id: 'eb999', full_name: 'Updated' };
|
||||
mockUpdate.mockResolvedValue(fakeResult);
|
||||
|
||||
const { update_ae_obj__event_badge } = await import('./ae_events__event_badge');
|
||||
const api_cfg = { base_url: 'http://localhost', headers: {} };
|
||||
const res = await update_ae_obj__event_badge({ api_cfg, event_id: 'evt1', event_badge_id: 'eb999', data_kv: { full_name_override: 'Updated' }, try_cache: false });
|
||||
|
||||
expect(mockUpdate).toHaveBeenCalled();
|
||||
const called = mockUpdate.mock.calls[0][0];
|
||||
expect(called.child_id).toBe('eb999');
|
||||
expect(called.fields).toEqual({ full_name_override: 'Updated' });
|
||||
expect(res).toEqual(fakeResult);
|
||||
});
|
||||
});
|
||||
|
||||
describe('delete_ae_obj_id__event_badge', () => {
|
||||
it('calls api.delete_nested_ae_obj_v3 and deletes from local DB when try_cache true', async () => {
|
||||
const mocked = await import('$lib/api/api');
|
||||
const mockDelete = mocked.api.delete_nested_ae_obj_v3 as jest.MockedFunction<any>;
|
||||
mockDelete.mockResolvedValue({ success: true });
|
||||
|
||||
const db = await import('$lib/ae_events/db_events');
|
||||
const dbDelete = db.db_events.badge.delete as jest.MockedFunction<any>;
|
||||
|
||||
const { delete_ae_obj_id__event_badge } = await import('./ae_events__event_badge');
|
||||
|
||||
const api_cfg = { base_url: 'http://localhost', headers: {} };
|
||||
const res = await delete_ae_obj_id__event_badge({ api_cfg, event_id: 'evt1', event_badge_id: 'ebDel', try_cache: true });
|
||||
|
||||
expect(mockDelete).toHaveBeenCalled();
|
||||
expect(dbDelete).toHaveBeenCalledWith('ebDel');
|
||||
expect(res).toEqual({ success: true });
|
||||
});
|
||||
});
|
||||
|
||||
describe('search__event_badge', () => {
|
||||
it('calls api.search_ae_obj_v3 and returns list (handles data envelope)', async () => {
|
||||
const mocked = await import('$lib/api/api');
|
||||
const mockSearch = mocked.api.search_ae_obj_v3 as jest.MockedFunction<any>;
|
||||
const fakeList = [{ event_badge_id: 'eb1' }, { event_badge_id: 'eb2' }];
|
||||
mockSearch.mockResolvedValue({ data: fakeList });
|
||||
|
||||
const { search__event_badge } = await import('./ae_events__event_badge');
|
||||
const api_cfg = { base_url: 'http://localhost', headers: {} };
|
||||
const res = await search__event_badge({ api_cfg, event_id: 'evt1', fulltext_search_qry_str: 'Test', try_cache: false });
|
||||
|
||||
expect(mockSearch).toHaveBeenCalled();
|
||||
expect(Array.isArray(res)).toBe(true);
|
||||
expect((res as any).length).toBe(2);
|
||||
});
|
||||
});
|
||||
@@ -9,46 +9,6 @@
|
||||
let { data, children, log_lvl = 0 }: Props = $props();
|
||||
|
||||
// *** Import Svelte specific
|
||||
// import { liveQuery } from 'dexie';
|
||||
|
||||
// import type { key_val } from '$lib/stores/ae_stores';
|
||||
// import { ae_util } from '$lib/ae_utils/ae_utils';
|
||||
|
||||
// import { core_func } from '$lib/ae_core_functions';
|
||||
// import { db_events } from '$lib/ae_events/db_events';
|
||||
// import {
|
||||
// ae_snip,
|
||||
// ae_loc,
|
||||
// ae_sess,
|
||||
// ae_api,
|
||||
// ae_trig,
|
||||
// slct,
|
||||
// slct_trigger
|
||||
// } from '$lib/stores/ae_stores';
|
||||
// import {
|
||||
// events_loc,
|
||||
// events_sess,
|
||||
// events_slct,
|
||||
// events_trigger
|
||||
// } from '$lib/stores/ae_events_stores';
|
||||
// import { events_func } from '$lib/ae_events_functions';
|
||||
|
||||
// let lq__event_obj = $derived(
|
||||
// liveQuery(async () => {
|
||||
// if (log_lvl) {
|
||||
// console.log(
|
||||
// `*** LiveQuery: lq__event_obj *** event_id=${$events_slct.event_id}`
|
||||
// );
|
||||
// }
|
||||
// let results = await db_events.event.get(
|
||||
// $events_slct?.event_id ?? ''
|
||||
// );
|
||||
|
||||
// return results;
|
||||
// })
|
||||
// );
|
||||
|
||||
// let nav_y_height = $state(0);
|
||||
|
||||
let box: any;
|
||||
let xLeft = $state(0);
|
||||
@@ -73,10 +33,6 @@
|
||||
}
|
||||
|
||||
// *** Functions and Logic
|
||||
// $effect(() => {
|
||||
// // if ($events_trigger == 'load__event_badge_obj_li' && $events_slct.event_id) {
|
||||
// // }
|
||||
// });
|
||||
</script>
|
||||
|
||||
<!-- <svelte:head>
|
||||
@@ -92,6 +48,5 @@
|
||||
</svelte:head> -->
|
||||
<!-- - Badges - {$events_loc?.title} -->
|
||||
|
||||
<!-- +layout: Where is here??? -->
|
||||
|
||||
{@render children?.()}
|
||||
|
||||
Reference in New Issue
Block a user