diff --git a/src/lib/components/molecules/MainMenu.svelte b/src/lib/components/molecules/MainMenu.svelte new file mode 100644 index 0000000..485b009 --- /dev/null +++ b/src/lib/components/molecules/MainMenu.svelte @@ -0,0 +1,25 @@ + + + + +
+ + + +
diff --git a/src/lib/components/molecules/MainMenuDetails.svelte b/src/lib/components/molecules/MainMenuDetails.svelte new file mode 100644 index 0000000..e6561e4 --- /dev/null +++ b/src/lib/components/molecules/MainMenuDetails.svelte @@ -0,0 +1,101 @@ + + + + +
+
+ + Project Name + +
+
+
+
+
+ + {$_('page.profile.menu.details.repository')} + +
+
+
+ + {$_('page.profile.menu.details.files')} +
+
+ + {$_('page.profile.menu.details.branches')} +
+
+ + {$_('page.profile.menu.details.commits')} +
+
+ + {$_('page.profile.menu.details.tags')} +
+
+
+ + {$_('page.profile.menu.details.issues')} + 2 +
+
+ + {$_('page.profile.menu.details.merge_requests')} + 2 +
+
+ + {$_('page.profile.menu.details.people')} + +
+
+
+ + {$_('page.profile.menu.details.roles')} +
+
+ + {$_('page.profile.menu.details.moderation')} +
+
+
+ + {$_('page.profile.menu.details.overview')} + +
+
+
+ diff --git a/src/lib/i18n/locales/bg.json b/src/lib/i18n/locales/bg.json index bbb6de9..05dba7c 100644 --- a/src/lib/i18n/locales/bg.json +++ b/src/lib/i18n/locales/bg.json @@ -101,6 +101,19 @@ "issues": "", "notifications": "", "prs": "" + }, + "details": { + "branches": "", + "commits": "", + "files": "", + "issues": "", + "merge_requests": "", + "moderation": "", + "overview": "", + "people": "", + "repository": "", + "roles": "", + "tags": "" } }, "projects": { diff --git a/src/lib/i18n/locales/de.json b/src/lib/i18n/locales/de.json index de3dfff..416332c 100644 --- a/src/lib/i18n/locales/de.json +++ b/src/lib/i18n/locales/de.json @@ -101,6 +101,19 @@ "issues": "", "notifications": "", "prs": "" + }, + "details": { + "branches": "", + "commits": "", + "files": "", + "issues": "", + "merge_requests": "", + "moderation": "", + "overview": "", + "people": "", + "repository": "", + "roles": "", + "tags": "" } }, "projects": { diff --git a/src/lib/i18n/locales/en.json b/src/lib/i18n/locales/en.json index 68bcbda..e99df8a 100644 --- a/src/lib/i18n/locales/en.json +++ b/src/lib/i18n/locales/en.json @@ -101,6 +101,19 @@ "issues": "{number}{blockElementOpen}{number, plural, one{ issue} other{ issues}} open{blockElementClose}", "notifications": "{number}{blockElementOpen} unread {number, plural, one{ notification} other{ notifications}}{blockElementClose}", "prs": "{number}{blockElementOpen}{number, plural, one{ pull request} other{ pull requests}} open{blockElementClose}" + }, + "details": { + "branches": "Branches", + "commits": "Commits", + "files": "Files", + "issues": "Issues", + "merge_requests": "Merge Requests", + "moderation": "Moderation", + "overview": "Overview", + "people": "People", + "repository": "Repository", + "roles": "Roles", + "tags": "Tags" } }, "projects": { diff --git a/src/lib/i18n/locales/he.json b/src/lib/i18n/locales/he.json index bf745e4..f18d46b 100644 --- a/src/lib/i18n/locales/he.json +++ b/src/lib/i18n/locales/he.json @@ -101,6 +101,19 @@ "issues": "", "notifications": "", "prs": "" + }, + "details": { + "branches": "", + "commits": "", + "files": "", + "issues": "", + "merge_requests": "", + "moderation": "", + "overview": "", + "people": "", + "repository": "", + "roles": "", + "tags": "" } }, "projects": { diff --git a/src/lib/i18n/locales/pl.json b/src/lib/i18n/locales/pl.json index 10bd6be..6eb5eaa 100644 --- a/src/lib/i18n/locales/pl.json +++ b/src/lib/i18n/locales/pl.json @@ -101,6 +101,19 @@ "issues": "", "notifications": "", "prs": "" + }, + "details": { + "branches": "", + "commits": "", + "files": "", + "issues": "", + "merge_requests": "", + "moderation": "", + "overview": "", + "people": "", + "repository": "", + "roles": "", + "tags": "" } }, "projects": { diff --git a/stories/molecules/MainMenuDetails.stories.ts b/stories/molecules/MainMenuDetails.stories.ts new file mode 100644 index 0000000..adcea72 --- /dev/null +++ b/stories/molecules/MainMenuDetails.stories.ts @@ -0,0 +1,26 @@ +/* Stories for MainMenuDetails molecule. + * Copyright (C) 2024 André Jaenisch + * SPDX-FileCopyrightText: 2024 André Jaenisch + * SPDX-License-Identifier: AGPL-3.0-or-later + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. If not, see . + */ + +import type { Meta, StoryObj } from '@storybook/svelte'; + +import MainMenuDetails from '$lib/components/molecules/MainMenuDetails.svelte'; + +const meta = { + title: 'Molecules/MainMenuDetails', + component: MainMenuDetails, + tags: ['autodocs'] +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Plain: Story = {}; diff --git a/tests/components/molecules/MainMenuDetails.test.ts b/tests/components/molecules/MainMenuDetails.test.ts new file mode 100644 index 0000000..fcaaa0f --- /dev/null +++ b/tests/components/molecules/MainMenuDetails.test.ts @@ -0,0 +1,158 @@ +/* Component test for MainMenuDetails molecule. + * Copyright (C) 2024 André Jaenisch + * SPDX-FileCopyrightText: 2024 André Jaenisch + * SPDX-License-Identifier: AGPL-3.0-or-later + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. If not, see . + */ + +import '@testing-library/jest-dom'; +import { render, screen } from '@testing-library/svelte'; +import { init, locale, register } from 'svelte-i18n'; + +import MainMenuDetails from '../../../src/lib/components/molecules/MainMenuDetails.svelte'; +import enMessages from '../../../src/lib/i18n/locales/en.json'; + +describe('MainMenuDetails.svelte', () => { + beforeEach(() => { + register('en', () => import('../../../src/lib/i18n/locales/en.json')); + init({ fallbackLocale: 'en', initialLocale: 'en' }); + locale.set('en'); + }); + + it('should mount', () => { + // Arrange + // Nothing to prepare + + // Act + const { container } = render(MainMenuDetails); + + // Assert + expect(container).toBeTruthy(); + }); + + it('should have a project name', () => { + // Arrange + // Nothing to prepare + + // Act + render(MainMenuDetails); + + // Assert + expect(screen.getByText('Project Name')).toBeInTheDocument(); + }); + + it('should have a repository item', () => { + // Arrange + // Nothing to prepare + + // Act + render(MainMenuDetails); + + // Assert + expect(screen.getByText(enMessages.page.profile.menu.details.repository)).toBeInTheDocument(); + }); + + it('should have a files item', () => { + // Arrange + // Nothing to prepare + + // Act + render(MainMenuDetails); + + // Assert + expect(screen.getByText(enMessages.page.profile.menu.details.files)).toBeInTheDocument(); + }); + + it('should have a branches item', () => { + // Arrange + // Nothing to prepare + + // Act + render(MainMenuDetails); + + // Assert + expect(screen.getByText(enMessages.page.profile.menu.details.branches)).toBeInTheDocument(); + }); + + it('should have a commits item', () => { + // Arrange + // Nothing to prepare + + // Act + render(MainMenuDetails); + + // Assert + expect(screen.getByText(enMessages.page.profile.menu.details.commits)).toBeInTheDocument(); + }); + + it('should have an issues item', () => { + // Arrange + // Nothing to prepare + + // Act + render(MainMenuDetails); + + // Assert + expect(screen.getByText(enMessages.page.profile.menu.details.issues)).toBeInTheDocument(); + }); + + it('should have a merge requests item', () => { + // Arrange + // Nothing to prepare + + // Act + render(MainMenuDetails); + + // Assert + expect(screen.getByText(enMessages.page.profile.menu.details.merge_requests)).toBeInTheDocument(); + }); + + it('should have a people item', () => { + // Arrange + // Nothing to prepare + + // Act + render(MainMenuDetails); + + // Assert + expect(screen.getByText(enMessages.page.profile.menu.details.people)).toBeInTheDocument(); + }); + + it('should have a roles item', () => { + // Arrange + // Nothing to prepare + + // Act + render(MainMenuDetails); + + // Assert + expect(screen.getByText(enMessages.page.profile.menu.details.roles)).toBeInTheDocument(); + }); + + it('should have a moderation item', () => { + // Arrange + // Nothing to prepare + + // Act + render(MainMenuDetails); + + // Assert + expect(screen.getByText(enMessages.page.profile.menu.details.moderation)).toBeInTheDocument(); + }); + + it('should have an overview item', () => { + // Arrange + // Nothing to prepare + + // Act + render(MainMenuDetails); + + // Assert + expect(screen.getByText(enMessages.page.profile.menu.details.overview)).toBeInTheDocument(); + }); +});