aboutsummaryrefslogtreecommitdiffstats
path: root/web_src/js/features/repo-settings-branches.test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'web_src/js/features/repo-settings-branches.test.ts')
-rw-r--r--web_src/js/features/repo-settings-branches.test.ts71
1 files changed, 71 insertions, 0 deletions
diff --git a/web_src/js/features/repo-settings-branches.test.ts b/web_src/js/features/repo-settings-branches.test.ts
new file mode 100644
index 0000000000..023039334f
--- /dev/null
+++ b/web_src/js/features/repo-settings-branches.test.ts
@@ -0,0 +1,71 @@
+import {beforeEach, describe, expect, test, vi} from 'vitest';
+import {initRepoBranchesSettings} from './repo-settings-branches.ts';
+import {POST} from '../modules/fetch.ts';
+import {createSortable} from '../modules/sortable.ts';
+
+vi.mock('../modules/fetch.ts', () => ({
+ POST: vi.fn(),
+}));
+
+vi.mock('../modules/sortable.ts', () => ({
+ createSortable: vi.fn(),
+}));
+
+describe('Repository Branch Settings', () => {
+ beforeEach(() => {
+ document.body.innerHTML = `
+ <div id="protected-branches-list" data-update-priority-url="some/repo/branches/priority">
+ <div class="flex-item tw-items-center item" data-id="1" >
+ <div class="drag-handle"></div>
+ </div>
+ <div class="flex-item tw-items-center item" data-id="2" >
+ <div class="drag-handle"></div>
+ </div>
+ <div class="flex-item tw-items-center item" data-id="3" >
+ <div class="drag-handle"></div>
+ </div>
+ </div>
+ `;
+
+ vi.clearAllMocks();
+ });
+
+ test('should initialize sortable for protected branches list', () => {
+ initRepoBranchesSettings();
+
+ expect(createSortable).toHaveBeenCalledWith(
+ document.querySelector('#protected-branches-list'),
+ expect.objectContaining({
+ handle: '.drag-handle',
+ animation: 150,
+ }),
+ );
+ });
+
+ test('should not initialize if protected branches list is not present', () => {
+ document.body.innerHTML = '';
+
+ initRepoBranchesSettings();
+
+ expect(createSortable).not.toHaveBeenCalled();
+ });
+
+ test('should post new order after sorting', async () => {
+ vi.mocked(POST).mockResolvedValue({ok: true} as Response);
+
+ // Mock createSortable to capture and execute the onEnd callback
+ vi.mocked(createSortable).mockImplementation((_el, options) => {
+ options.onEnd();
+ return {destroy: vi.fn()};
+ });
+
+ initRepoBranchesSettings();
+
+ expect(POST).toHaveBeenCalledWith(
+ 'some/repo/branches/priority',
+ expect.objectContaining({
+ data: {ids: [1, 2, 3]},
+ }),
+ );
+ });
+});