Skip to content

Commit

Permalink
test: define better query runner which does not require string parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
vladjerca authored and seferturan committed Jan 9, 2025
1 parent 56a41c4 commit 8f031e3
Show file tree
Hide file tree
Showing 34 changed files with 175 additions and 287 deletions.
Original file line number Diff line number Diff line change
@@ -1,22 +1,16 @@
import QueryTestBed from '$test/beds/query/QueryTestBed.svelte';

import { UserHistoryMappedMock } from '$mocks/data/users/UserHistoryMappedMock';
import { waitForQueryResult } from '$test/beds/query/waitForQueryResult.ts';
import { runQuery } from '$test/beds/query/runQuery.ts';
import { createQuery } from '@tanstack/svelte-query';
import { render } from '@testing-library/svelte';
import { describe, expect, it } from 'vitest';
import { currentUserHistoryQuery } from './currentUserHistoryQuery';

describe('currentUserHistoryQuery', () => {
it('should query for user user history', async () => {
render(QueryTestBed, {
props: {
queryFactory: () => createQuery(currentUserHistoryQuery()),
mapper: (response) => response?.data,
},
const result = await runQuery({
factory: () => createQuery(currentUserHistoryQuery()),
mapper: (response) => response?.data,
});

const result = await waitForQueryResult();
expect(result).to.deep.equal(UserHistoryMappedMock);
});
});
Original file line number Diff line number Diff line change
@@ -1,22 +1,16 @@
import QueryTestBed from '$test/beds/query/QueryTestBed.svelte';

import { ExtendedUserMappedMock } from '$mocks/data/users/ExtendedUserSettingsMappedMock.ts';
import { waitForQueryResult } from '$test/beds/query/waitForQueryResult.ts';
import { runQuery } from '$test/beds/query/runQuery.ts';
import { createQuery } from '@tanstack/svelte-query';
import { render } from '@testing-library/svelte';
import { describe, expect, it } from 'vitest';
import { currentUserSettingsQuery } from './currentUserSettingsQuery.ts';

describe('currentUserSettingsQuery', () => {
it('should query for user profile', async () => {
render(QueryTestBed, {
props: {
queryFactory: () => createQuery(currentUserSettingsQuery()),
mapper: (response) => response?.data,
},
const result = await runQuery({
factory: () => createQuery(currentUserSettingsQuery()),
mapper: (response) => response?.data,
});

const result = await waitForQueryResult();
expect(result).to.deep.equal(ExtendedUserMappedMock);
});
});
12 changes: 3 additions & 9 deletions projects/client/src/lib/features/auth/stores/useUser.spec.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,14 @@
import QueryTestBed from '$test/beds/query/QueryTestBed.svelte';

import { ExtendedUserMappedMock } from '$mocks/data/users/ExtendedUserSettingsMappedMock.ts';
import { waitForQueryResult } from '$test/beds/query/waitForQueryResult.ts';
import { render } from '@testing-library/svelte';
import { runQuery } from '$test/beds/query/runQuery.ts';
import { describe, expect, it } from 'vitest';
import { useUser } from './useUser.ts';

describe('store: useUser', () => {
it('should contain the user profile', async () => {
render(QueryTestBed, {
props: {
queryFactory: () => useUser().user,
},
const result = await runQuery({
factory: () => useUser().user,
});

const result = await waitForQueryResult();
expect(result).to.deep.equal(ExtendedUserMappedMock);
});
});
Original file line number Diff line number Diff line change
@@ -1,23 +1,17 @@
import QueryTestBed from '$test/beds/query/QueryTestBed.svelte';

import { MovieHereticMappedMock } from '$mocks/data/summary/movies/heretic/mapped/MovieHereticMappedMock.ts';
import { waitForQueryResult } from '$test/beds/query/waitForQueryResult.ts';
import { runQuery } from '$test/beds/query/runQuery.ts';
import { createQuery } from '@tanstack/svelte-query';
import { render } from '@testing-library/svelte';
import { describe, expect, it } from 'vitest';
import { movieSummaryQuery } from './movieSummaryQuery.ts';

describe('movieSummaryQuery', () => {
it('should query for Heretic (2024)', async () => {
render(QueryTestBed, {
props: {
queryFactory: () =>
createQuery(movieSummaryQuery({ slug: MovieHereticMappedMock.slug })),
mapper: (response) => response?.data,
},
const result = await runQuery({
factory: () =>
createQuery(movieSummaryQuery({ slug: MovieHereticMappedMock.slug })),
mapper: (response) => response?.data,
});

const result = await waitForQueryResult();
expect(result).to.deep.equal(MovieHereticMappedMock);
});
});
Original file line number Diff line number Diff line change
@@ -1,25 +1,17 @@
import QueryTestBed from '$test/beds/query/QueryTestBed.svelte';

import { waitForQueryResult } from '$test/beds/query/waitForQueryResult.ts';
import { runQuery } from '$test/beds/query/runQuery.ts';
import { createQuery } from '@tanstack/svelte-query';
import { render } from '@testing-library/svelte';
import { describe, expect, it } from 'vitest';
import { ShowSiloMappedMock } from '../../../../mocks/data/summary/shows/silo/mapped/ShowSiloMappedMock.ts';
import { showSummaryQuery } from './showSummaryQuery.ts';

describe('showSummaryQuery', () => {
it('should query for Silo (2023)', async () => {
render(QueryTestBed, {
props: {
queryFactory: () =>
createQuery(
showSummaryQuery({ slug: ShowSiloMappedMock.slug }),
),
mapper: (response) => response?.data,
},
const result = await runQuery({
factory: () =>
createQuery(showSummaryQuery({ slug: ShowSiloMappedMock.slug })),
mapper: (response) => response?.data,
});

const result = await waitForQueryResult();
expect(result).to.deep.equal(ShowSiloMappedMock);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,10 @@ import MediaDetails, { type MediaDetailsProps } from './MediaDetails.svelte';

import { render, screen } from '@testing-library/svelte';
import { describe, expect, it } from 'vitest';
import type { MediaSummary } from './MediaSummary';

describe('MediaDetails', () => {
const defaultProps: MediaDetailsProps = {
//See TODO in MovieHereticMappedMock.ts for why this is cast
media: MovieHereticMappedMock as unknown as MediaSummary,
media: MovieHereticMappedMock,
studios: MovieHereticStudiosMappedMock,
crew: MovieHereticPeopleMappedMock,
};
Expand Down
12 changes: 3 additions & 9 deletions projects/client/src/lib/stores/useShowProgress.spec.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,16 @@
import QueryTestBed from '$test/beds/query/QueryTestBed.svelte';

import { ShowSiloMappedMock } from '$mocks/data/summary/shows/silo/mapped/ShowSiloMappedMock.ts';
import { ShowSiloProgressMappedMock } from '$mocks/data/summary/shows/silo/mapped/ShowSiloProgressMappedMock.ts';
import { waitForQueryResult } from '$test/beds/query/waitForQueryResult.ts';
import { render } from '@testing-library/svelte';
import { runQuery } from '$test/beds/query/runQuery.ts';
import { describe, expect, it } from 'vitest';
import { useShowProgress } from './useShowProgress.ts';

describe('store: useShowProgress', () => {
describe('show: Silo (2023)', () => {
it('should return progress', async () => {
render(QueryTestBed, {
props: {
queryFactory: () => useShowProgress(ShowSiloMappedMock.slug).progress,
},
const result = await runQuery({
factory: () => useShowProgress(ShowSiloMappedMock.slug).progress,
});

const result = await waitForQueryResult();
expect(result).to.deep.equal(ShowSiloProgressMappedMock);
});
});
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
/*
TODO: the return type should be MovieSummary
airedDate should be a Date object. However, JSON.stringify does not
play nicely with dates, and already converts them to a string
before the replacer function is called.
*/
export const MovieHereticMappedMock = {
import type { MovieSummary } from '$lib/requests/models/MovieSummary';

export const MovieHereticMappedMock: MovieSummary = {
'cover': {
'url': {
'medium':
Expand Down Expand Up @@ -39,7 +35,7 @@ export const MovieHereticMappedMock = {
},
'title': 'Heretic',
'trailer': 'https://youtube.com/watch?v=jpWUOxRozZg',
'airedDate': '2024-11-08T00:00:00.000Z',
'airedDate': new Date('2024-11-08T00:00:00.000Z'),
'certification': 'R',
'country': 'us',
'languages': [
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
export const MovieHereticPortugueseMappedMock = {
import type { MediaIntl } from '$lib/models/MediaIntl';

export const MovieHereticPortugueseMappedMock: MediaIntl = {
'overview':
'Duas jovens missionárias são forçadas a provar sua fé quando batem na porta errada e são recebidas pelo diabólico Sr. Reed, ficando presas em seu jogo mortal de gato e rato.',
'tagline': 'Questione tudo.',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
export const MovieHereticRatingsMappedMock = {
import type { MediaRating } from '$lib/models/MediaRating';

export const MovieHereticRatingsMappedMock: MediaRating = {
'trakt': {
'rating': 0.722561,
'votes': 3803,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
export const MovieHereticStatsMappedMock = {
import type { MediaStats } from '$lib/models/MediaStats';

export const MovieHereticStatsMappedMock: MediaStats = {
'watchers': 23206,
'plays': 30942,
'collectors': 12018,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
export const MovieHereticStudiosMappedMock = [
import type { MediaStudio } from '$lib/models/MediaStudio';

export const MovieHereticStudiosMappedMock: MediaStudio[] = [
{
'name': 'Shiny Penny',
'country': undefined,
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
export const MovieStudiosResponseMock = [
{
'name': 'Shiny Penny',
'country': null,
'country': undefined,
'ids': {
'trakt': 164885,
'slug': 'shiny-penny',
Expand All @@ -10,7 +10,7 @@ export const MovieStudiosResponseMock = [
},
{
'name': 'Beck/Woods',
'country': null,
'country': undefined,
'ids': {
'trakt': 75946,
'slug': 'beck-woods',
Expand All @@ -28,7 +28,7 @@ export const MovieStudiosResponseMock = [
},
{
'name': 'CatchLight Studios',
'country': null,
'country': undefined,
'ids': {
'trakt': 98650,
'slug': 'catchlight-studios-670133a6-7993-41ee-a05a-a806f40a1288',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
export const MovieMatrixMappedMock = {
import type { MovieSummary } from '$lib/requests/models/MovieSummary';

export const MovieMatrixMappedMock: MovieSummary = {
'id': 481,
'slug': 'the-matrix-1999',
'title': 'The Matrix',
'runtime': 136,
'year': 1999,
'tagline': 'The fight for the future begins.',
'country': 'us',
'status': 'released',
'languages': [
'en',
],
Expand All @@ -31,11 +34,11 @@ export const MovieMatrixMappedMock = {
},
'genres': [
'action',
'science-fiction',
'science fiction',
],
'overview':
'Set in the 22nd century, The Matrix tells the story of a computer hacker who joins a group of underground insurgents fighting the vast and powerful computers who now rule the earth.',
'trailer': 'https://youtube.com/watch?v=d0XTFAMmhrE',
'airedDate': '1999-03-31T00:00:00.000Z',
'airedDate': new Date('1999-03-31T00:00:00.000Z'),
'certification': 'R',
};
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
export const ShowDevsMappedMock = {
import type { ShowSummary } from '$lib/requests/models/ShowSummary';

export const ShowDevsMappedMock: ShowSummary = {
'id': 147971,
'slug': 'devs',
'title': 'Devs',
'runtime': 52,
'year': 2020,
'tagline': 'Reality is stranger than dreams.',
'country': 'us',
'status': 'ended',
'languages': [
'en',
],
Expand All @@ -32,12 +35,12 @@ export const ShowDevsMappedMock = {
'genres': [
'drama',
'fantasy',
'science-fiction',
'science fiction',
'mystery',
],
'overview':
'Young computer engineer Lily Chan investigates the secretive development division of her employer, a cutting-edge tech company based in San Francisco, which she believes is behind the murder of her boyfriend.',
'trailer': 'https://youtube.com/watch?v=Fp9LMsI6uJ8',
'airedDate': '2020-03-05T05:00:00.000Z',
'airedDate': new Date('2020-03-05T05:00:00.000Z'),
'certification': 'TV-MA',
};
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
export const ShowSiloJapaneseMappedMock = {
import type { MediaIntl } from '$lib/models/MediaIntl';

export const ShowSiloJapaneseMappedMock: MediaIntl = {
'overview':
'有毒物質が蔓延する荒廃した未来。何千人もの人間が地下深くに広がる巨大なサイロで暮らしている。保安官が基本的な規則を破り、住民たちが謎の死を遂げる中、機械工のジュリエットはサイロの驚くべき秘密と真実を解き明かしていく。',
'tagline': '生きるために、命をかけて追い求める。',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
export const ShowSiloMappedMock = {
import type { ShowSummary } from '$lib/requests/models/ShowSummary';

export const ShowSiloMappedMock: ShowSummary = {
'cover': {
'url': {
'medium':
Expand All @@ -9,7 +11,7 @@ export const ShowSiloMappedMock = {
},
'genres': [
'drama',
'science-fiction',
'science fiction',
],
'id': 180770,
'overview':
Expand All @@ -33,7 +35,7 @@ export const ShowSiloMappedMock = {
},
'title': 'Silo',
'trailer': 'https://youtube.com/watch?v=8ZYhuvIv1pA',
'airedDate': '2023-05-05T01:00:00.000Z',
'airedDate': new Date('2023-05-05T01:00:00.000Z'),
'certification': 'TV-MA',
'country': 'us',
'languages': [
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
export const ShowSiloPeopleMappedMock = {
import type { MediaCrew } from '$lib/requests/models/MediaCrew';

export const ShowSiloPeopleMappedMock: MediaCrew = {
'directors': [
{
'job': 'Script Supervisor',
Expand Down
Loading

0 comments on commit 8f031e3

Please sign in to comment.