Skip to content

Commit

Permalink
Add recurring donation join to donations() endpoint
Browse files Browse the repository at this point in the history
related to #1483
  • Loading branch information
mohammadranjbarz committed May 9, 2024
1 parent 801e069 commit 25dbd76
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 0 deletions.
78 changes: 78 additions & 0 deletions src/resolvers/donationResolver.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -657,6 +657,74 @@ function donationsTestCases() {
allDonationsCount,
);
});
it('should get result with recurring donations joined (for streamed mini donations)', async () => {
const project = await saveProjectDirectlyToDb(createProjectData());
const user = await saveUserDirectlyToDb(generateRandomEtheriumAddress());

const anchorAddress = generateRandomEtheriumAddress();

const anchorContractAddress = await addNewAnchorAddress({
project,
owner: user,
creator: user,
address: anchorAddress,
networkId: NETWORK_IDS.OPTIMISTIC,
txHash: generateRandomEvmTxHash(),
});
const currency = 'USD';

const recurringDonation = await createNewRecurringDonation({
txHash: generateRandomEvmTxHash(),
networkId: NETWORK_IDS.OPTIMISTIC,
donor: user,
anchorContractAddress,
flowRate: '100',
currency,
project,
anonymous: false,
isBatch: false,
totalUsdStreamed: 1,
});
recurringDonation.status = RECURRING_DONATION_STATUS.ACTIVE;
await recurringDonation.save();
const donation = await saveDonationDirectlyToDb(
{
...createDonationData(),
},
user.id,
project.id,
);
donation.recurringDonation = recurringDonation;
await donation.save();

// Use moment to parse the createdAt string
const momentDate = moment(donation.createdAt, 'YYYYMMDD HH:mm:ss');

// Create fromDate as one second before
const fromDate = momentDate
.clone()
.subtract(1, 'seconds')
.format('YYYYMMDD HH:mm:ss');

// Create toDate as one second after
const toDate = momentDate
.clone()
.add(1, 'seconds')
.format('YYYYMMDD HH:mm:ss');
const donationsResponse = await axios.post(graphqlUrl, {
query: fetchAllDonationsQuery,
variables: {
fromDate,
toDate,
},
});
assert.isOk(donationsResponse.data.data.donations);
assert.equal(donationsResponse.data.data.donations.length, 1);
assert.equal(
Number(donationsResponse.data.data.donations[0].recurringDonation.id),
recurringDonation.id,
);
});
it('should get result when sending fromDate', async () => {
const oldDonation = await saveDonationDirectlyToDb(
createDonationData(),
Expand Down Expand Up @@ -817,6 +885,16 @@ function donationsTestCases() {
assert.isArray(donation.project.categories);
});
});
it('should project include categories', async () => {
const donationsResponse = await axios.post(graphqlUrl, {
query: fetchAllDonationsQuery,
variables: {},
});
assert.isOk(donationsResponse.data.data.donations);
donationsResponse.data.data.donations.forEach(donation => {
assert.isArray(donation.project.categories);
});
});
}

function createDonationTestCases() {
Expand Down
1 change: 1 addition & 0 deletions src/resolvers/donationResolver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,7 @@ export class DonationResolver {
.leftJoin('donation.user', 'user')
.addSelect(publicSelectionFields)
.leftJoinAndSelect('donation.project', 'project')
.leftJoinAndSelect('donation.recurringDonation', 'recurringDonation')
.leftJoinAndSelect('project.categories', 'categories')
.leftJoin('project.projectPower', 'projectPower')
.addSelect([
Expand Down
4 changes: 4 additions & 0 deletions test/graphqlQueries.ts
Original file line number Diff line number Diff line change
Expand Up @@ -672,6 +672,10 @@ export const fetchAllDonationsQuery = `
anonymous
valueUsd
amount
recurringDonation{
id
txHash
}
user {
id
walletAddress
Expand Down

0 comments on commit 25dbd76

Please sign in to comment.