diff --git a/src/components/fork-me-block.test.ts b/src/components/fork-me-block.test.ts new file mode 100644 index 0000000000..fa29cfa48d --- /dev/null +++ b/src/components/fork-me-block.test.ts @@ -0,0 +1,46 @@ +import { beforeEach, describe, expect, it } from '@jest/globals'; +import { screen, within } from '@testing-library/dom'; +import { html } from 'lit'; +import { fixture } from '../../__tests__/helpers/fixtures'; +import './fork-me-block'; + +describe('fork-me-block', () => { + beforeEach(() => { + // Clear any existing custom elements if needed + }); + + it('defines a component', () => { + expect(customElements.get('fork-me-block')).toBeDefined(); + }); + + it('renders the fork me content', async () => { + const { shadowRootForWithin } = await fixture( + html``, + ); + const { getByText } = within(shadowRootForWithin); + + expect(screen.getByTestId('fork-block')).toBeInTheDocument(); + expect(getByText('Fork me on GitHub')).toBeInTheDocument(); + expect(getByText('Fork this project')).toBeInTheDocument(); + expect(getByText(/Hoverboard is open source conference website template/)).toBeInTheDocument(); + }); + + it('renders the GitHub link correctly', async () => { + const { shadowRootForWithin } = await fixture(html``); + const { getByRole } = within(shadowRootForWithin); + + const link = getByRole('link'); + expect(link).toHaveAttribute('href', 'https://github.com/gdg-x/hoverboard'); + }); + + it('has proper styling classes', async () => { + const { shadowRootForWithin } = await fixture(html``); + const { getByText } = within(shadowRootForWithin); + + const container = getByText('Fork me on GitHub').closest('.container'); + expect(container).toHaveClass('container', 'container-narrow'); + + const button = getByText('Fork this project').closest('md-outlined-button'); + expect(button).toHaveClass('icon-right'); + }); +}); diff --git a/src/elements/fork-me-block.ts b/src/components/fork-me-block.ts similarity index 70% rename from src/elements/fork-me-block.ts rename to src/components/fork-me-block.ts index b6dae80f08..1d598a8552 100644 --- a/src/elements/fork-me-block.ts +++ b/src/components/fork-me-block.ts @@ -1,15 +1,18 @@ -import { customElement } from '@polymer/decorators'; -import '@polymer/iron-icon'; +// TODO: enable imports +// import '@polymer/iron-icon'; import '@material/web/button/outlined-button.js'; -import { html, PolymerElement } from '@polymer/polymer'; -import '../utils/icons'; -import './shared-styles'; +import { css, html } from 'lit'; +import { customElement } from 'lit/decorators.js'; +// TODO: enable imports +// import '../utils/icons'; +import { ThemedElement } from './themed-element'; @customElement('fork-me-block') -export class ForkMeBlock extends PolymerElement { - static get template() { - return html` - + `, + ]; + } + override render() { + return html`

Fork me on GitHub

@@ -43,3 +50,9 @@ export class ForkMeBlock extends PolymerElement { `; } } + +declare global { + interface HTMLElementTagNameMap { + 'fork-me-block': ForkMeBlock; + } +} diff --git a/src/pages/home-page.ts b/src/pages/home-page.ts index ece2a43e7e..9a88fb8ae9 100644 --- a/src/pages/home-page.ts +++ b/src/pages/home-page.ts @@ -10,7 +10,7 @@ import { HeroBlock } from '../components/hero/hero-block'; import '../elements/about-organizer-block'; import '../elements/featured-videos'; import '../elements/footer-block'; -import '../elements/fork-me-block'; +import '../components/fork-me-block'; import '../elements/gallery-block'; import '../elements/latest-posts-block'; import '../elements/map-block'; @@ -308,7 +308,7 @@ export class HomePage extends ReduxMixin(PolymerElement) { ? showForkMeBlockForProjectIds.includes(firebaseApp.options.appId) : false; if (showForkMeBlock) { - import('../elements/fork-me-block'); + import('../components/fork-me-block'); } return showForkMeBlock; }