Skip to content

Commit 6e32f7a

Browse files
authored
Merge pull request #574 from abimbolaalabi/feat/activity-feed
test(wallets): stabilize wallet activity integration tests with Prism…
2 parents 81eb738 + c8723c2 commit 6e32f7a

1 file changed

Lines changed: 91 additions & 66 deletions

File tree

Lines changed: 91 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,96 @@
11
import request from 'supertest';
2+
import { prisma } from '../../utils/prisma.utils';
3+
4+
jest.mock('../../utils/prisma.utils', () => ({
5+
prisma: {
6+
activity: {
7+
findMany: jest.fn(),
8+
count: jest.fn(),
9+
},
10+
creatorProfile: {
11+
findMany: jest.fn(),
12+
},
13+
},
14+
}));
15+
216
import app from '../../app';
317

18+
const mockPrisma = prisma as unknown as {
19+
activity: { findMany: jest.Mock; count: jest.Mock };
20+
creatorProfile: { findMany: jest.Mock };
21+
};
22+
23+
const VALID_ADDRESS = 'GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF';
24+
425
describe('GET /api/v1/wallets/:address/activity - Malformed Stellar Address', () => {
5-
it('should return 400 for address with wrong prefix', async () => {
6-
const response = await request(app)
7-
.get(
8-
'/api/v1/wallets/XBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB/activity'
9-
)
10-
.expect(400);
11-
12-
expect(response.body.error).toBeDefined();
13-
expect(response.body.details).toBeDefined();
14-
expect(
15-
response.body.details.some((d: any) => d.field === 'address')
16-
).toBeTruthy();
17-
});
18-
19-
it('should return 400 for too-short address', async () => {
20-
const response = await request(app)
21-
.get('/api/v1/wallets/GASHORT/activity')
22-
.expect(400);
23-
24-
expect(response.body.error).toBeDefined();
25-
expect(response.body.details).toBeDefined();
26-
expect(
27-
response.body.details.some((d: any) => d.field === 'address')
28-
).toBeTruthy();
29-
});
30-
31-
it('should return 400 for address with invalid characters', async () => {
32-
const response = await request(app)
33-
.get(
34-
'/api/v1/wallets/GA!!!INVALID!!!CHARACTERS!!!HERE!!!AAAAAAAAAAAAAAAAA/activity'
35-
)
36-
.expect(400);
37-
38-
expect(response.body.error).toBeDefined();
39-
expect(response.body.details).toBeDefined();
40-
expect(
41-
response.body.details.some((d: any) => d.field === 'address')
42-
).toBeTruthy();
43-
});
44-
45-
it('should return 400 for completely invalid address format', async () => {
46-
const response = await request(app)
47-
.get('/api/v1/wallets/not-a-stellar-address/activity')
48-
.expect(400);
49-
50-
expect(response.body.error).toBeDefined();
51-
expect(response.body.details).toBeDefined();
52-
expect(
53-
response.body.details.some((d: any) => d.field === 'address')
54-
).toBeTruthy();
55-
});
56-
57-
it('should not return 400 for valid Stellar address format', async () => {
58-
// Using a properly formatted Stellar address (may return 200 with empty data or 404)
59-
const response = await request(app)
60-
.get(
61-
'/api/v1/wallets/GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF/activity'
62-
)
63-
.expect(res => {
64-
// Should be 200 (valid request) or potentially 404 (wallet not found)
65-
// But NOT 400 (validation error)
66-
expect([200, 404]).toContain(res.status);
67-
});
68-
69-
expect(response.status).not.toBe(400);
70-
});
26+
beforeEach(() => {
27+
jest.clearAllMocks();
28+
});
29+
30+
it('should return 400 for address with wrong prefix', async () => {
31+
const response = await request(app)
32+
.get(
33+
'/api/v1/wallets/XBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB/activity'
34+
)
35+
.expect(400);
36+
37+
expect(response.body.error).toBeDefined();
38+
expect(response.body.error.details).toBeDefined();
39+
expect(
40+
response.body.error.details.some((d: any) => d.field === 'address')
41+
).toBeTruthy();
42+
});
43+
44+
it('should return 400 for too-short address', async () => {
45+
const response = await request(app)
46+
.get('/api/v1/wallets/GASHORT/activity')
47+
.expect(400);
48+
49+
expect(response.body.error).toBeDefined();
50+
expect(response.body.error.details).toBeDefined();
51+
expect(
52+
response.body.error.details.some((d: any) => d.field === 'address')
53+
).toBeTruthy();
54+
});
55+
56+
it('should return 400 for address with invalid characters', async () => {
57+
const response = await request(app)
58+
.get(
59+
'/api/v1/wallets/GA!!!INVALID!!!CHARACTERS!!!HERE!!!AAAAAAAAAAAAAAAAA/activity'
60+
)
61+
.expect(400);
62+
63+
expect(response.body.error).toBeDefined();
64+
expect(response.body.error.details).toBeDefined();
65+
expect(
66+
response.body.error.details.some((d: any) => d.field === 'address')
67+
).toBeTruthy();
68+
});
69+
70+
it('should return 400 for completely invalid address format', async () => {
71+
const response = await request(app)
72+
.get('/api/v1/wallets/not-a-stellar-address/activity')
73+
.expect(400);
74+
75+
expect(response.body.error).toBeDefined();
76+
expect(response.body.error.details).toBeDefined();
77+
expect(
78+
response.body.error.details.some((d: any) => d.field === 'address')
79+
).toBeTruthy();
80+
});
81+
82+
it('should return 200 with empty data array for a valid Stellar address with no trade history', async () => {
83+
mockPrisma.activity.findMany.mockResolvedValue([]);
84+
mockPrisma.activity.count.mockResolvedValue(0);
85+
mockPrisma.creatorProfile.findMany.mockResolvedValue([]);
86+
87+
const response = await request(app)
88+
.get(`/api/v1/wallets/${VALID_ADDRESS}/activity`)
89+
.expect(200);
90+
91+
expect(response.body.success).toBe(true);
92+
expect(response.body.data.items).toEqual([]);
93+
expect(response.body.data.meta.total).toBe(0);
94+
expect(response.body.data.meta.hasMore).toBe(false);
95+
});
7196
});

0 commit comments

Comments
 (0)