Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 32 additions & 28 deletions apps/kitchensink-react/e2e/multi-resource.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,17 @@ test.describe('Multi Resource Route', () => {
process.env['SDK_E2E_DATASET_0'], // First dataset
)

// Create a player document in dataset 1
// Create a movie document in dataset 1
const {
documentIds: [playerId],
documentIds: [movieId],
} = await createDocuments(
[
{
_type: 'player',
name: 'Test Player Multi Resource',
slackUserId: 'U1234567890',
_type: 'movie',
title: 'Test Movie Multi Resource',
tmdb_id: 123456,
release_date: '2021-01-01',
hosted_poster_path: 'https://example.com/poster.jpg',
},
],
{asDraft: false}, // Create as published document
Expand All @@ -45,16 +47,16 @@ test.describe('Multi Resource Route', () => {

// Wait for both document cards to be visible
await expect(pageContext.getByTestId(/^author-document-/)).toBeVisible()
await expect(pageContext.getByTestId(/^player-document-/)).toBeVisible()
await expect(pageContext.getByTestId(/^movie-document-/)).toBeVisible()

// Verify author document content is displayed
await expect(pageContext.getByTestId('author-name-display')).toHaveText(
'Test Author Multi Resource',
)

// Verify player document content is displayed
await expect(pageContext.getByTestId('player-name-display')).toHaveText(
'Test Player Multi Resource',
// Verify movie document content is displayed
await expect(pageContext.getByTestId('movie-name-display')).toHaveText(
'Test Movie Multi Resource',
)

// Test author projection data
Expand All @@ -67,12 +69,14 @@ test.describe('Multi Resource Route', () => {
'Best Code Award',
)

// Test player projection data
await expect(pageContext.getByTestId('player-projection-name')).toContainText(
'Test Player Multi Resource',
// Test movie projection data
await expect(pageContext.getByTestId('movie-projection-name')).toContainText(
'Test Movie Multi Resource',
)
await expect(pageContext.getByTestId('player-projection-slack-id')).toContainText('U1234567890')
await expect(pageContext.getByTestId('player-projection-has-slack')).toContainText('Yes')
await expect(pageContext.getByTestId('movie-projection-release-date')).toContainText(
'2021-01-01',
)
await expect(pageContext.getByTestId('movie-projection-has-poster')).toContainText('Yes')

// Test editing the author document
const authorNameInput = pageContext.getByTestId('author-name-input')
Expand All @@ -87,26 +91,26 @@ test.describe('Multi Resource Route', () => {
'Updated Author Name',
)

// Test editing the player document
const playerNameInput = pageContext.getByTestId('player-name-input')
await playerNameInput.fill('Updated Player Name')
await playerNameInput.press('Enter')
// Test editing the movie document
const movieNameInput = pageContext.getByTestId('movie-name-input')
await movieNameInput.fill('Updated Movie Name')
await movieNameInput.press('Enter')

// Verify the change is reflected in the display
await expect(pageContext.getByTestId('player-name-display')).toHaveText('Updated Player Name')
await expect(pageContext.getByTestId('movie-name-display')).toHaveText('Updated Movie Name')

// Verify the change is also reflected in the projection
await expect(pageContext.getByTestId('player-projection-name')).toContainText(
'Updated Player Name',
await expect(pageContext.getByTestId('movie-projection-name')).toContainText(
'Updated Movie Name',
)

// Test that external changes are reflected (simulating real-time updates)
const authorClient = getClient(process.env['SDK_E2E_DATASET_0'])
await authorClient.patch(`drafts.${authorId}`).set({name: 'Externally Updated Author'}).commit()

// Test external change for player
const playerClient = getClient(process.env['SDK_E2E_DATASET_1'])
await playerClient.patch(`drafts.${playerId}`).set({name: 'Externally Updated Player'}).commit()
// Test external change for movie
const movieClient = getClient(process.env['SDK_E2E_DATASET_1'])
await movieClient.patch(`drafts.${movieId}`).set({title: 'Externally Updated Movie'}).commit()

// Verify external change is reflected
await expect(async () => {
Expand All @@ -118,10 +122,10 @@ test.describe('Multi Resource Route', () => {

// Verify external change is reflected
await expect(async () => {
const playerDisplay = await pageContext.getByTestId('player-name-display').textContent()
const playerProjection = await pageContext.getByTestId('player-projection-name').textContent()
expect(playerDisplay).toBe('Externally Updated Player')
expect(playerProjection).toContain('Externally Updated Player')
const movieDisplay = await pageContext.getByTestId('movie-name-display').textContent()
const movieProjection = await pageContext.getByTestId('movie-projection-name').textContent()
expect(movieDisplay).toBe('Externally Updated Movie')
expect(movieProjection).toContain('Externally Updated Movie')
}).toPass({timeout: 5000})
})
})
4 changes: 2 additions & 2 deletions apps/kitchensink-react/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@
"build": "pnpm tsc && vite build",
"clean": "rimraf dist",
"deploy": "sanity deploy",
"dev": "vite",
"dev": "sanity dev",
"install": "npm run schema:extract && npm run types:generate",
"lint": "eslint .",
"paramour": "npx paramour --config=./src/css/css.config.js --output=./src/css/paramour.css",
"preview": "vite preview",
"schema:extract": "sanity schema extract --workspace ppsg7ml5-test --path schema.ppsg7ml5.test.json && sanity schema extract --workspace d45jg133-production --path schema.d45jg133.production.json",
"schema:extract": "sanity schema extract --workspace ppsg7ml5-test --path schema.ppsg7ml5.test.json && sanity schema extract --workspace vo1ysemo-production --path schema.vo1ysemo.production.json",
"test:e2e": "playwright test",
"tsc": "tsc --noEmit",
"types:generate": "./node_modules/@sanity/cli/bin/sanity typegen generate"
Expand Down
4 changes: 2 additions & 2 deletions apps/kitchensink-react/sanity-typegen.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
"schemaId": "ppsg7ml5.test"
},
{
"schemaPath": "./schema.d45jg133.production.json",
"schemaId": "d45jg133.production"
"schemaPath": "./schema.vo1ysemo.production.json",
"schemaId": "vo1ysemo.production"
}
],
"overloadClientMethods": false
Expand Down
4 changes: 2 additions & 2 deletions apps/kitchensink-react/sanity.cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ import {defineCliConfig} from 'sanity/cli'

export default defineCliConfig({
app: {
organizationId: 'oSyH1iET5',
organizationId: 'oblZgbTFj',
entry: './src/App.tsx',
id: 'cbhuuqhkp6sevhpreoh0so8s',
id: 'wkyoigmzawwnnwx458zgoh46',
},
})
48 changes: 39 additions & 9 deletions apps/kitchensink-react/sanity.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,13 +69,43 @@ const bookType = defineType({
],
})

const playerType = defineType({
name: 'player',
title: 'Player',
const movieType = defineType({
name: 'movie',
title: 'Movie',
type: 'document',
fields: [
defineField({name: 'name', title: 'Name', type: 'string'}),
defineField({name: 'slackUserId', title: 'Slack User ID', type: 'string'}),
{
name: 'title',
title: 'Title',
type: 'string',
validation: (Rule) => Rule.required(),
},
{
name: 'tmdb_id',
title: 'TMDB ID',
type: 'number',
validation: (Rule) => Rule.required(),
},
{
name: 'poster_path',
title: 'Poster Image',
type: 'string',
},
{
name: 'hosted_poster_path',
title: 'Hosted Poster Image',
type: 'url',
},
{
name: 'release_date',
title: 'Release Date',
type: 'string',
},
{
name: 'overview',
title: 'Overview',
type: 'text',
},
],
})

Expand All @@ -90,12 +120,12 @@ export default defineConfig([
},
},
{
name: 'd45jg133-production',
basePath: '/d45jg133-production',
projectId: 'd45jg133',
name: 'vo1ysemo-production',
basePath: '/vo1ysemo-production',
projectId: 'vo1ysemo',
dataset: 'production',
schema: {
types: [playerType],
types: [movieType],
},
},
])
Loading
Loading