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
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ export const Breadcrumbs = component$(
const breadcrumbs = createBreadcrumbs(menu, loc.pathname);

return (
<Host class="breadcrumbs" data-test-breadcrumbs>
{breadcrumbs.map((b) => (
<span>{b.href ? <a href={b.href}>{b.text}</a> : b.text}</span>
<Host class="breadcrumbs">
{breadcrumbs.map((b, i) => (
<span data-test-breadcrumb={i}>{b.href ? <a href={b.href}>{b.text}</a> : b.text}</span>
))}
</Host>
);
Expand Down
4 changes: 2 additions & 2 deletions packages/qwik-city/runtime/src/app/components/menu/menu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ export const Menu = component$(
return (
<Host class="menu">
{menu
? menu.items?.map((item) => (
? menu.items?.map((item, i) => (
<>
<h5>{item.text}</h5>
<h5 data-test-menu-header={i}>{item.text}</h5>
<ul>
{item.items?.map((item) => (
<li>
Expand Down
35 changes: 28 additions & 7 deletions packages/qwik-city/runtime/src/app/routes/blog/[...slug].tsx
Original file line number Diff line number Diff line change
@@ -1,17 +1,38 @@
import { component$, Host } from '@builder.io/qwik';
import { useLocation, DocumentHead } from '~qwik-city-runtime';
import { component$, Host, Resource } from '@builder.io/qwik';
import { useEndpoint, DocumentHead, EndpointHandler } from '~qwik-city-runtime';

export default component$(() => {
const { pathname, params } = useLocation();
const resource = useEndpoint<EndpointData>();

return (
<Host>
<h1>Blog: {params.slug}</h1>
<p>Pathname: {pathname}</p>
<Resource
resource={resource}
onResolved={(blog) => (
<>
<h1>{blog.blogTitle}</h1>
<p>{blog.blogContent}</p>
</>
)}
/>
</Host>
);
});

export const head: DocumentHead = ({ params }) => {
return { title: `Blog: ${params.slug}` };
export const onGet: EndpointHandler<EndpointData> = async ({ params, request }) => {
return {
body: {
blogTitle: `Blog: ${params.slug}`,
blogContent: `${params.slug}, ${request.url}`,
},
};
};

export const head: DocumentHead<EndpointData> = ({ data }) => {
return { title: data?.blogTitle };
};

export interface EndpointData {
blogTitle: string;
blogContent: string;
}
2 changes: 1 addition & 1 deletion packages/qwik-city/runtime/src/app/tests/auth.spec.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { expect, test } from '@playwright/test';
import { assertPage, getPage, linkNavigate, load } from './util';
import { assertPage, getPage, linkNavigate, load } from './util.js';

test('Qwik City Auth', async ({ context, javaScriptEnabled }) => {
const ctx = await load(context, javaScriptEnabled, '/sign-in');
Expand Down
100 changes: 100 additions & 0 deletions packages/qwik-city/runtime/src/app/tests/menu.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
import { expect, test } from '@playwright/test';
import { assertPage, linkNavigate, load, locator } from './util.js';

test('Qwik City Page', async ({ context, javaScriptEnabled }) => {
const ctx = await load(context, javaScriptEnabled, '/');

/*********** Docs: home ***********/
await linkNavigate(ctx, '[data-test-link="docs-home"]');
await assertPage(ctx, {
pathname: '/docs',
title: 'Docs: Welcome! - Qwik',
layoutHierarchy: ['root', 'docs'],
h1: 'Welcome to the Docs!',
activeHeaderLink: 'Docs',
});

let menuHeader = locator(ctx, `[data-test-menu-header="0"]`);
expect(await menuHeader.innerText()).toBe('Introduction');

let breadcrumb0 = locator(ctx, `[data-test-breadcrumb="0"]`);
if (await breadcrumb0.isVisible()) {
expect(true, `Breadcrumb selector ${breadcrumb0} found`).toBe(false);
}

/*********** Docs: overview ***********/
await linkNavigate(ctx, '[data-test-menu-link="/docs/overview"]');
await assertPage(ctx, {
pathname: '/docs/overview',
title: 'Docs: Overview - Qwik',
layoutHierarchy: ['root', 'docs'],
h1: 'Overview',
activeHeaderLink: 'Docs',
});

menuHeader = locator(ctx, `[data-test-menu-header="0"]`);
expect(await menuHeader.innerText()).toBe('Introduction');

breadcrumb0 = locator(ctx, `[data-test-breadcrumb="0"]`);
expect(await breadcrumb0.innerText()).toBe('Introduction');

let breadcrumb1 = locator(ctx, `[data-test-breadcrumb="1"]`);
expect(await breadcrumb1.innerText()).toBe('Overview');

/*********** Docs: getting-started ***********/
await linkNavigate(ctx, '[data-test-menu-link="/docs/getting-started"]');
await assertPage(ctx, {
pathname: '/docs/getting-started',
title: 'Docs: Getting Started - Qwik',
layoutHierarchy: ['root', 'docs'],
h1: 'Getting Started',
activeHeaderLink: 'Docs',
});

menuHeader = locator(ctx, `[data-test-menu-header="0"]`);
expect(await menuHeader.innerText()).toBe('Introduction');

breadcrumb0 = locator(ctx, `[data-test-breadcrumb="0"]`);
expect(await breadcrumb0.innerText()).toBe('Introduction');

breadcrumb1 = locator(ctx, `[data-test-breadcrumb="1"]`);
expect(await breadcrumb1.innerText()).toBe('Getting Started');

/*********** Docs: components/basics ***********/
await linkNavigate(ctx, '[data-test-menu-link="/docs/components/basics"]');
await assertPage(ctx, {
pathname: '/docs/components/basics',
title: 'Docs: components basics - Qwik',
layoutHierarchy: ['root', 'docs'],
h1: 'Docs: components basics',
activeHeaderLink: 'Docs',
});

menuHeader = locator(ctx, `[data-test-menu-header="0"]`);
expect(await menuHeader.innerText()).toBe('Introduction');

breadcrumb0 = locator(ctx, `[data-test-breadcrumb="0"]`);
expect(await breadcrumb0.innerText()).toBe('Components');

breadcrumb1 = locator(ctx, `[data-test-breadcrumb="1"]`);
expect(await breadcrumb1.innerText()).toBe('Basics');

/*********** Docs: components/listeners ***********/
await linkNavigate(ctx, '[data-test-menu-link="/docs/components/listeners"]');
await assertPage(ctx, {
pathname: '/docs/components/listeners',
title: 'Docs: components listeners - Qwik',
layoutHierarchy: ['root', 'docs'],
h1: 'Docs: components listeners',
activeHeaderLink: 'Docs',
});

menuHeader = locator(ctx, `[data-test-menu-header="0"]`);
expect(await menuHeader.innerText()).toBe('Introduction');

breadcrumb0 = locator(ctx, `[data-test-breadcrumb="0"]`);
expect(await breadcrumb0.innerText()).toBe('Components');

breadcrumb1 = locator(ctx, `[data-test-breadcrumb="1"]`);
expect(await breadcrumb1.innerText()).toBe('Listeners');
});
36 changes: 3 additions & 33 deletions packages/qwik-city/runtime/src/app/tests/page.spec.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { expect, test } from '@playwright/test';
import { assertPage, linkNavigate, load, locator } from './util';
import { assertPage, linkNavigate, load, locator } from './util.js';

test('Qwik City Page', async ({ context, javaScriptEnabled }) => {
const ctx = await load(context, javaScriptEnabled, '/');
Expand Down Expand Up @@ -27,7 +27,7 @@ test('Qwik City Page', async ({ context, javaScriptEnabled }) => {
await linkNavigate(ctx, '[data-test-link="blog-resumability"]');
await assertPage(ctx, {
pathname: '/blog/what-is-resumability',
title: 'Qwik' /****** TODO *****/,
title: 'Blog: what-is-resumability - Qwik',
layoutHierarchy: ['root', 'blog'],
h1: 'Blog: what-is-resumability',
activeHeaderLink: 'Blog',
Expand All @@ -37,7 +37,7 @@ test('Qwik City Page', async ({ context, javaScriptEnabled }) => {
await linkNavigate(ctx, '[data-test-link="blog-serializing-props"]');
await assertPage(ctx, {
pathname: '/blog/serializing-props',
title: 'Qwik' /****** TODO *****/,
title: 'Blog: serializing-props - Qwik',
layoutHierarchy: ['root', 'blog'],
h1: 'Blog: serializing-props',
activeHeaderLink: 'Blog',
Expand All @@ -63,36 +63,6 @@ test('Qwik City Page', async ({ context, javaScriptEnabled }) => {
activeHeaderLink: 'Docs',
});

/*********** Docs: getting-started ***********/
await linkNavigate(ctx, '[data-test-menu-link="/docs/getting-started"]');
await assertPage(ctx, {
pathname: '/docs/getting-started',
title: 'Docs: Getting Started - Qwik',
layoutHierarchy: ['root', 'docs'],
h1: 'Getting Started',
activeHeaderLink: 'Docs',
});

/*********** Docs: components/basics ***********/
await linkNavigate(ctx, '[data-test-menu-link="/docs/components/basics"]');
await assertPage(ctx, {
pathname: '/docs/components/basics',
title: 'Docs: components basics - Qwik',
layoutHierarchy: ['root', 'docs'],
h1: 'Docs: components basics',
activeHeaderLink: 'Docs',
});

/*********** Docs: components/listeners ***********/
await linkNavigate(ctx, '[data-test-menu-link="/docs/components/listeners"]');
await assertPage(ctx, {
pathname: '/docs/components/listeners',
title: 'Docs: components listeners - Qwik',
layoutHierarchy: ['root', 'docs'],
h1: 'Docs: components listeners',
activeHeaderLink: 'Docs',
});

/*********** Products: hat ***********/
await linkNavigate(ctx, '[data-test-link="products-hat"]');
await assertPage(ctx, {
Expand Down