Skip to content

Test license #1720

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
May 8, 2025
Merged
Show file tree
Hide file tree
Changes from 2 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
59 changes: 59 additions & 0 deletions packages/ui-components/src/__tests__/License.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import { render, screen, waitFor } from '@testing-library/svelte';
import { beforeEach, expect, describe, vi, afterEach } from 'vitest';
import License from '../lib/components/License.svelte';

// Mock the global fetch function
const mockFetch = vi.fn();
vi.stubGlobal('fetch', mockFetch);

vi.mock('svelte-markdown', async () => {
const MockMarkdown = (await import('../lib/__mocks__/MockComponent.svelte')).default;
return { default: MockMarkdown };
});

describe('License', () => {
const mockMarkdownContent = 'This is license text.';
const expectedUrl =
'https://raw.githubusercontent.com/rainlanguage/decentralicense/refs/heads/master/README.md';
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Consider extracting the URL as a constant

The hardcoded URL in the component is duplicated in the test, creating a tight coupling between the test and implementation details.

If the URL changes in the component, you'll need to update it in two places. Consider extracting it to a constant or configuration value that can be shared:

// Could be moved to a separate constants file that both component and test import
export const LICENSE_URL = 'https://raw.githubusercontent.com/rainlanguage/decentralicense/refs/heads/master/README.md';


beforeEach(() => {
mockFetch.mockReset();
});

afterEach(() => {
vi.restoreAllMocks();
});

it('fetches and renders markdown content on mount', async () => {
mockFetch.mockResolvedValue({
ok: true,
text: async () => mockMarkdownContent
});

render(License);

await waitFor(() => {
expect(mockFetch).toHaveBeenCalledTimes(1);
expect(mockFetch).toHaveBeenCalledWith(expectedUrl);
});

await waitFor(() => {
expect(screen.getByTestId('mock-component').getAttribute('source')).toBe(mockMarkdownContent);
});
});

it('handles fetch network error gracefully', async () => {
mockFetch.mockRejectedValue(new Error('Network error'));

const { container } = render(License);

await waitFor(() => {
expect(mockFetch).toHaveBeenCalledTimes(1);
expect(mockFetch).toHaveBeenCalledWith(expectedUrl);
});

await waitFor(() => {
expect(screen.getByTestId('mock-component').getAttribute('source')).toBe('Failed to fetch license');
});
});
});
2 changes: 1 addition & 1 deletion packages/ui-components/src/lib/components/License.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
source = await response.text();
}
} catch {
source = '';
source = 'Failed to fetch license';
}
});
</script>
Expand Down
Loading