Skip to content

Commit

Permalink
Merge pull request #1078 from cardstack/cs-6616-index-card-should-not…
Browse files Browse the repository at this point in the history
…-get-auto-attached

Index card should not get auto attached
  • Loading branch information
IanCal authored Mar 12, 2024
2 parents 755a1da + c9fb459 commit ac8b6e7
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 28 deletions.
16 changes: 15 additions & 1 deletion packages/host/app/components/matrix/room.gts
Original file line number Diff line number Diff line change
Expand Up @@ -214,9 +214,23 @@ export default class Room extends Component<Signature> {

private get autoAttachedCard(): CardDef | undefined {
let stackItems = this.operatorModeStateService.topMostStackItems();
let topMostCard = stackItems[stackItems.length - 1]?.card;
if (stackItems.length === 0) {
return undefined;
}
let topMostItem = stackItems[stackItems.length - 1];
let topMostCard = topMostItem?.card;
if (!topMostCard) {
return undefined;
} else {
let realmURL = topMostItem.card[topMostItem.api.realmURL];
if (!realmURL) {
throw new Error(
`could not determine realm URL for card ${topMostItem.card.id}`,
);
}
if (topMostItem.card.id === `${realmURL.href}index`) {
return undefined;
}
}
this.setLastTopMostCard(topMostCard);

Expand Down
7 changes: 1 addition & 6 deletions packages/matrix/helpers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -246,15 +246,10 @@ export async function logout(page: Page) {
await expect(page.locator('[data-test-login-btn]')).toHaveCount(1);
}

export async function createRoom(page: Page, removeAutoAttachedCard = true) {
export async function createRoom(page: Page) {
await page.locator('[data-test-create-room-btn]').click();
let roomName = await getRoomName(page);
await isInRoom(page, roomName);
if (removeAutoAttachedCard) {
await page
.locator(`[data-test-selected-card] [data-test-remove-card-btn]`)
.click();
}
return roomName;
}

Expand Down
70 changes: 49 additions & 21 deletions packages/matrix/tests/messages.spec.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { expect, test, type Page } from '@playwright/test';
import { expect, test } from '@playwright/test';
import { registerUser } from '../docker/synapse';
import {
login,
Expand Down Expand Up @@ -32,20 +32,13 @@ test.describe('Room messages', () => {
test.afterEach(async () => {
await synapseStop(synapse.synapseId);
});
async function removeAutoAttachedCard(page: Page) {
await page
.locator(
`[data-test-selected-card][data-test-autoattached-card] [data-test-remove-card-btn]`,
)
.click();
await page.locator(`[data-test-room-settled]`).waitFor();
}

test(`it can send a message in a room`, async ({ page }) => {
await login(page, 'user1', 'pass');
let room1 = await getRoomName(page);
await expect(page.locator('[data-test-new-session]')).toHaveCount(1);
await expect(page.locator('[data-test-message-field]')).toHaveValue('');
await removeAutoAttachedCard(page);

await expect(page.locator('[data-test-send-message-btn]')).toBeDisabled();
await assertMessages(page, []);

Expand Down Expand Up @@ -102,7 +95,6 @@ test.describe('Room messages', () => {
test(`it can send a markdown message`, async ({ page }) => {
await login(page, 'user1', 'pass');
let room1 = await getRoomName(page);
await removeAutoAttachedCard(page);
await sendMessage(page, room1, 'message with _style_');
await assertMessages(page, [
{
Expand Down Expand Up @@ -153,7 +145,6 @@ test.describe('Room messages', () => {
const testCard = `${testHost}/hassan`;
await login(page, 'user1', 'pass');
await page.locator(`[data-test-room-settled]`).waitFor();
await removeAutoAttachedCard(page);

await page.locator('[data-test-choose-card-btn]').click();
await page.locator(`[data-test-select="${testCard}"]`).click();
Expand Down Expand Up @@ -183,7 +174,6 @@ test.describe('Room messages', () => {
const testCard = `${testHost}/big-card`; // this is a 153KB card
await login(page, 'user1', 'pass');
await page.locator(`[data-test-room-settled]`).waitFor();
await removeAutoAttachedCard(page);
await page.locator('[data-test-choose-card-btn]').click();
await page.locator(`[data-test-select="${testCard}"]`).click();
await page.locator('[data-test-card-catalog-go-button]').click();
Expand Down Expand Up @@ -225,7 +215,6 @@ test.describe('Room messages', () => {
const testCard = `${testHost}/mango-puppy`; // this is a 153KB card
await login(page, 'user1', 'pass');
await page.locator(`[data-test-room-settled]`).waitFor();
await removeAutoAttachedCard(page);
await page.locator('[data-test-choose-card-btn]').click();
await page.locator(`[data-test-select="${testCard}"]`).click();
await page.locator('[data-test-card-catalog-go-button]').click();
Expand Down Expand Up @@ -365,7 +354,6 @@ test.describe('Room messages', () => {
const testCard = `${testHost}/hassan`;
await login(page, 'user1', 'pass');
let room1 = await getRoomName(page);
await removeAutoAttachedCard(page);
await sendMessage(page, room1, undefined, [testCard]);
await assertMessages(page, [
{
Expand All @@ -379,7 +367,6 @@ test.describe('Room messages', () => {
const testCard = `${testHost}/type-examples`;
await login(page, 'user1', 'pass');
let room1 = await getRoomName(page);
await removeAutoAttachedCard(page);

// Send a card that contains a type that matrix doesn't support
await sendMessage(page, room1, undefined, [testCard]);
Expand All @@ -396,7 +383,6 @@ test.describe('Room messages', () => {
const testCard2 = `${testHost}/mango`;
await login(page, 'user1', 'pass');
await page.locator(`[data-test-room-settled]`).waitFor();
await removeAutoAttachedCard(page);

await selectCardFromCatalog(page, testCard);
await selectCardFromCatalog(page, testCard2);
Expand Down Expand Up @@ -462,7 +448,6 @@ test.describe('Room messages', () => {

await login(page, 'user1', 'pass');
let room1 = await getRoomName(page);
await removeAutoAttachedCard(page);

await sendMessage(page, room1, 'message 1', [testCard1]);
await assertMessages(page, [message1]);
Expand Down Expand Up @@ -494,7 +479,6 @@ test.describe('Room messages', () => {

await login(page, 'user1', 'pass');
let room1 = await getRoomName(page);
await removeAutoAttachedCard(page);

await selectCardFromCatalog(page, testCard1);
await selectCardFromCatalog(page, testCard2);
Expand All @@ -518,7 +502,6 @@ test.describe('Room messages', () => {

await login(page, 'user1', 'pass');
await page.locator(`[data-test-room-settled]`).waitFor();
await removeAutoAttachedCard(page);

await selectCardFromCatalog(page, testCard2);
await selectCardFromCatalog(page, testCard1);
Expand Down Expand Up @@ -550,7 +533,6 @@ test.describe('Room messages', () => {

await login(page, 'user1', 'pass');
await page.locator(`[data-test-room-settled]`).waitFor();
await removeAutoAttachedCard(page);

await selectCardFromCatalog(page, testCard1);
await selectCardFromCatalog(page, testCard2);
Expand Down Expand Up @@ -626,6 +608,52 @@ test.describe('Room messages', () => {
]);
});

test('does not auto attach index card', async ({ page }) => {
const testCard1 = `${testHost}/hassan`;

await login(page, 'user1', 'pass');
// Make sure we've got an open room
await getRoomName(page);

// assert nothing attached

await expect(page.locator(`[data-test-selected-card]`)).toHaveCount(0);

// Opening a card should result in it being auto-attached
await page
.locator(
`[data-test-stack-item-content] [data-test-cards-grid-item='${testCard1}']`,
)
.click();

await expect(page.locator(`[data-test-selected-card]`)).toHaveCount(1);
await page.locator(`[data-test-selected-card]`).hover();
await expect(page.locator(`[data-test-tooltip-content]`)).toHaveText(
'Topmost card is shared automatically',
);

// close card
await page
.locator(`[data-test-stack-card='${testCard1}'] [data-test-close-button]`)
.click();

// Should have no cards attached again
await expect(page.locator(`[data-test-selected-card]`)).toHaveCount(0);

// Fill in a message

await page.locator('[data-test-message-field]').fill('This is a message');

await page.locator('[data-test-send-message-btn]').click();
await assertMessages(page, [
{
from: 'user1',
message: 'This is a message',
cards: [],
},
]);
});

test('can remove auto-attached card', async ({ page }) => {
const testCard1 = `${testHost}/hassan`;
const testCard2 = `${testHost}/mango`;
Expand Down

0 comments on commit ac8b6e7

Please sign in to comment.