Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
19f3977
chore: update ui
andypols Apr 17, 2026
08580b9
chore: update tooling
andypols Apr 17, 2026
440445f
chore: update core types, context, utilities, auth
andypols Apr 17, 2026
141af76
chore: update API service layer
andypols Apr 17, 2026
be88117
chore: add TanStack React-Query data layer
andypols Apr 17, 2026
d3f7218
chore: replace MUI shared components with Primer
andypols Apr 17, 2026
51e4132
chore: replace MUI shared components with Primer
andypols Apr 17, 2026
32543ca
chore: update tests
andypols Apr 17, 2026
0bafb14
chore: upgrade @headlessui/react
andypols Apr 17, 2026
3315dad
chore: upgrade logo to work in header
andypols Apr 17, 2026
297b33b
chore: migrate PushRequests and UserProfile to GitProxyUnderlineNav
andypols Apr 19, 2026
9fa55da
feat: add GET /users/:id/activity endpoint for user profile push history
andypols Apr 19, 2026
0dae391
feat: add push activity rollups to repo and user list APIs
andypols Apr 19, 2026
1cf06da
feat: missing file
andypols Apr 19, 2026
06cfc9a
feat: add scm-metadata service
andypols Apr 19, 2026
ed13d3d
feat: rm config
andypols Apr 20, 2026
ceead74
feat: add cypress
andypols Apr 20, 2026
53b9ce7
chore: update package-lock for internal registry
andypols Apr 20, 2026
0142e59
chore: fix tests
andypols Apr 20, 2026
245b71e
chore: fix missing deps
andypols Apr 20, 2026
350528a
chore: fix missing deps
andypols Apr 20, 2026
39b3287
chore: fix missing deps
andypols Apr 20, 2026
d60ee7b
chore: fix test
andypols Apr 20, 2026
2a63335
chore: fix cypress test
andypols Apr 20, 2026
d07c2f0
chore: fix incomplete URL substring sanitization
andypols Apr 20, 2026
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
2 changes: 1 addition & 1 deletion .github/workflows/unused-dependencies.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:
node-version: '24.x'
- name: 'Run depcheck'
run: |
npx depcheck --skip-missing --ignores="tsx,@babel/*,@commitlint/*,eslint,eslint-*,husky,ts-node,concurrently,nyc,prettier,typescript,tsconfig-paths,vite-tsconfig-paths,quicktype,history,@types/domutils,@vitest/coverage-v8,cross-env,c8"
npx depcheck --skip-missing --ignores="tsx,@babel/*,@commitlint/*,eslint,eslint-*,husky,ts-node,concurrently,nyc,prettier,typescript,tsconfig-paths,vite-tsconfig-paths,quicktype,history,@types/domutils,@vitest/coverage-v8,cross-env,c8,tailwindcss"
echo $?
if [[ $? == 1 ]]; then
echo "Unused dependencies or devDependencies found"
Expand Down
25 changes: 6 additions & 19 deletions cypress/e2e/autoApproved.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@
* limitations under the License.
*/

import moment from 'moment';

describe('Auto-Approved Push Test', () => {
beforeEach(() => {
cy.login('admin', 'admin');
Expand Down Expand Up @@ -55,34 +53,23 @@ describe('Auto-Approved Push Test', () => {
},
],
attestation: {
timestamp: '2023-10-01T12:00:00Z',
autoApproved: true,
timestamp: 1696161600000,
reviewer: {
username: 'system',
displayName: '',
},
},
},
}).as('getPush');
});

it('should display auto-approved message and verify tooltip contains the expected timestamp', () => {
it('should display auto-approved message', () => {
cy.visit('/dashboard/push/123');

cy.wait('@getPush');

cy.contains('Auto-approved by system').should('be.visible');

cy.get('svg.MuiSvgIcon-root')
.filter((_, el) => getComputedStyle(el).fill === 'rgb(0, 128, 0)')
.invoke('attr', 'style')
.should('include', 'cursor: default')
.and('include', 'opacity: 0.5');

const expectedTooltipTimestamp = moment('2023-10-01T12:00:00Z')
.local()
.format('dddd, MMMM Do YYYY, h:mm:ss a');

cy.get('kbd').trigger('mouseover');

cy.get('.MuiTooltip-tooltip').should('contain', expectedTooltipTimestamp);

cy.contains('approved this contribution').should('not.exist');
});
});
4 changes: 2 additions & 2 deletions cypress/e2e/login.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,12 @@ describe('Login page', () => {
cy.url().should('include', '/dashboard/repo');
});

it('should show an error snackbar on invalid login', () => {
it('should show an error flash on invalid login', () => {
cy.get('[data-test="username"]').type('wronguser');
cy.get('[data-test="password"]').type('wrongpass');
cy.get('[data-test="login"]').click();

cy.get('.MuiSnackbarContent-message')
cy.get('[data-test="login-error"]')
.should('be.visible')
.and('contain', 'You entered an invalid username or password.');
});
Expand Down
38 changes: 14 additions & 24 deletions cypress/e2e/repo.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,13 +66,13 @@ describe('Repo', () => {

cy.get('[data-testid="repo-list-view"]').find('[data-testid="add-repo-button"]').click();

cy.get('[data-testid="add-repo-dialog"]').within(() => {
cy.get('[role="dialog"]').within(() => {
cy.get('[data-testid="repo-project-input"]').type('cypress-test');
cy.get('[data-testid="repo-name-input"]').type(repoName);
cy.get('[data-testid="repo-url-input"]').type(
`https://github.com/cypress-test/${repoName}.git`,
);
cy.get('[data-testid="add-repo-button"]').click();
cy.get('[data-testid="add-repo-submit"]').click();
});

cy.contains('a', `cypress-test/${repoName}`, { timeout: 10000 }).click();
Expand All @@ -81,11 +81,11 @@ describe('Repo', () => {
it('Displays an error when adding an existing repo', () => {
cy.get('[data-testid="repo-list-view"]').find('[data-testid="add-repo-button"]').click();

cy.get('[data-testid="add-repo-dialog"]').within(() => {
cy.get('[role="dialog"]').within(() => {
cy.get('[data-testid="repo-project-input"]').type('finos');
cy.get('[data-testid="repo-name-input"]').type('git-proxy');
cy.get('[data-testid="repo-url-input"]').type('https://github.com/finos/git-proxy.git');
cy.get('[data-testid="add-repo-button"]').click();
cy.get('[data-testid="add-repo-submit"]').click();
});

cy.get('[data-testid="repo-error"]')
Expand Down Expand Up @@ -127,38 +127,28 @@ describe('Repo', () => {
});
});

it('Opens tooltip with correct content and can copy', () => {
it('Opens Code overlay with correct content and can copy', () => {
cy.visit('/dashboard/repo');
cy.on('uncaught:exception', () => false);

const tooltipQuery = 'div[role="tooltip"]';

// Check the tooltip isn't open to start with
cy.get(tooltipQuery).should('not.exist');
// Overlay should not be visible initially
cy.contains('span', cloneURL).should('not.exist');

// Find the repo's Code button and click it
cy.get(`a[href="/dashboard/repo/${repoId}"]`)
.closest('tr')
.find('span')
.contains('Code')
.contains('button', 'Code')
.should('exist')
.click();

// Check tooltip is open and contains the correct clone URL
cy.get(tooltipQuery)
.should('exist')
.find('span')
.contains(cloneURL)
.should('exist')
.parent()
.find('span')
.next()
.get('svg.octicon-copy')
.should('exist')
.click();
// Verify overlay shows correct clone URL
cy.contains('span', cloneURL).should('be.visible');

cy.get('svg.octicon-copy').should('not.exist');
// Click the copy to clipboard button (sibling of the clone URL span)
cy.contains('span', cloneURL).parent().find('button').click();

// Verify icon changes from copy to check (confirming clipboard copy)
cy.get('svg.octicon-copy').should('not.exist');
cy.get('svg.octicon-check').should('exist');
});

Expand Down
Loading
Loading