Skip to content

Commit ad72480

Browse files
committed
test: cover metadata contract path
1 parent b363dd3 commit ad72480

1 file changed

Lines changed: 43 additions & 1 deletion

File tree

frontend/src/__tests__/App.contract.test.tsx

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ describe('App contract', () => {
3030
})
3131
);
3232
}),
33-
http.get('/api/v1/feeds/generated-token.json', ({ request }) => {
33+
http.get('/api/v1/feeds/generated-token', ({ request }) => {
3434
expect(request.headers.get('accept')).toBe('application/feed+json');
3535

3636
return HttpResponse.json(
@@ -67,4 +67,46 @@ describe('App contract', () => {
6767
expect(screen.getByText('Contract Item')).toBeInTheDocument();
6868
});
6969
});
70+
71+
it('loads instance metadata from /api/v1 without trailing slash', async () => {
72+
let slashlessMetadataRequests = 0;
73+
let trailingSlashMetadataRequests = 0;
74+
75+
server.use(
76+
http.get('/api/v1', () => {
77+
slashlessMetadataRequests += 1;
78+
79+
return HttpResponse.json({
80+
success: true,
81+
data: {
82+
api: {
83+
name: 'html2rss-web API',
84+
description: 'RESTful API for converting websites to RSS feeds',
85+
openapi_url: 'http://example.test/api/v1/openapi.yaml',
86+
},
87+
instance: {
88+
feed_creation: {
89+
enabled: true,
90+
access_token_required: true,
91+
},
92+
},
93+
},
94+
});
95+
}),
96+
http.get('/api/v1/', () => {
97+
trailingSlashMetadataRequests += 1;
98+
99+
return HttpResponse.text('', { status: 404 });
100+
})
101+
);
102+
103+
render(<App />);
104+
105+
await screen.findByLabelText('Page URL');
106+
107+
expect(screen.getByRole('button', { name: 'Generate feed URL' })).toBeInTheDocument();
108+
expect(screen.queryByText('Instance metadata unavailable')).not.toBeInTheDocument();
109+
expect(slashlessMetadataRequests).toBeGreaterThanOrEqual(1);
110+
expect(trailingSlashMetadataRequests).toBe(0);
111+
});
70112
});

0 commit comments

Comments
 (0)