Skip to content

Commit

Permalink
refactor: tidy up transferMeow
Browse files Browse the repository at this point in the history
  • Loading branch information
domw30 committed Sep 26, 2024
1 parent 31e0db7 commit a7ad5e4
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 30 deletions.
10 changes: 7 additions & 3 deletions src/store/rewards/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,13 @@ export const initialState: RewardsState = {

export const totalRewardsViewed = createAction(SagaActionTypes.TotalRewardsViewed);
export const closeRewardsTooltip = createAction(SagaActionTypes.CloseRewardsTooltip);
export const transferMeow = createAction<{ meowSenderUserId: string; meowRecipientUserId: string; amount: string }>(
SagaActionTypes.TransferMeow
);
export const transferMeow = createAction<{
meowSenderId: string;
postOwnerId: string;
postMessageId: string;
meowAmount: string;
roomId: string;
}>(SagaActionTypes.TransferMeow);

const slice = createSlice({
name: 'rewards',
Expand Down
48 changes: 24 additions & 24 deletions src/store/rewards/saga.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -113,9 +113,9 @@ describe(checkNewRewardsLoaded, () => {

describe(transferMeow, () => {
it('handles successful MEOW transfer', async () => {
const meowSenderUserId = 'sender-id';
const meowRecipientUserId = 'recipient-id';
const amount = '500000000000000000';
const meowSenderId = 'sender-id';
const postOwnerId = 'post-owner-id';
const meowAmount = '500000000000000000';

const apiResponse = {
success: true,
Expand All @@ -126,22 +126,22 @@ describe(transferMeow, () => {
};

const { storeState } = await expectSaga(transferMeow, {
payload: { meowSenderUserId, meowRecipientUserId, amount },
payload: { meowSenderId, postOwnerId, meowAmount },
})
.withReducer(rootReducer, initialState())
.provide([[call(transferMeowAPI, meowSenderUserId, meowRecipientUserId, amount), apiResponse]])
.provide([[call(transferMeowAPI, meowSenderId, postOwnerId, meowAmount), apiResponse]])
.run();

expect(storeState.rewards.meow).toEqual('500000000000000000');
});

it('handles meowSenderUserId is equal to meowRecipientUserId failure', async () => {
const meowSenderUserId = 'sender-id';
const meowRecipientUserId = 'sender-id';
const amount = '500000000000000000';
it('handles meowSenderId is equal to postOwnerId failure', async () => {
const meowSenderId = 'sender-id';
const postOwnerId = 'sender-id';
const meowAmount = '500000000000000000';

const { storeState } = await expectSaga(transferMeow, {
payload: { meowSenderUserId, meowRecipientUserId, amount },
payload: { meowSenderId, postOwnerId, meowAmount },
})
.withReducer(rootReducer, initialState())
.run();
Expand All @@ -150,46 +150,46 @@ describe(transferMeow, () => {
});

it('handles API MEOW transfer failure', async () => {
const meowSenderUserId = 'sender-id';
const meowRecipientUserId = 'recipient-id';
const amount = '500000000000000000';
const meowSenderId = 'sender-id';
const postOwnerId = 'post-owner-id';
const meowAmount = '500000000000000000';

const apiResponse = {
success: false,
error: 'Transfer failed.',
};

const { storeState } = await expectSaga(transferMeow, {
payload: { meowSenderUserId, meowRecipientUserId, amount },
payload: { meowSenderId, postOwnerId, meowAmount },
})
.withReducer(rootReducer, initialState())
.provide([[call(transferMeowAPI, meowSenderUserId, meowRecipientUserId, amount), apiResponse]])
.provide([[call(transferMeowAPI, meowSenderId, postOwnerId, meowAmount), apiResponse]])
.run();

expect(storeState.rewards.transferError).toEqual('Transfer failed.');
});

it('handles unexpected error during MEOW transfer', async () => {
const meowSenderUserId = 'sender-id';
const meowRecipientUserId = 'recipient-id';
const amount = '500000000000000000';
const meowSenderId = 'sender-id';
const postOwnerId = 'post-owner-id';
const meowAmount = '500000000000000000';

const error = new Error('Network error');

const { storeState } = await expectSaga(transferMeow, {
payload: { meowSenderUserId, meowRecipientUserId, amount },
payload: { meowSenderId, postOwnerId, meowAmount },
})
.withReducer(rootReducer, initialState())
.provide([[call(transferMeowAPI, meowSenderUserId, meowRecipientUserId, amount), Promise.reject(error)]])
.provide([[call(transferMeowAPI, meowSenderId, postOwnerId, meowAmount), Promise.reject(error)]])
.run();

expect(storeState.rewards.transferError).toEqual('Network error');
});

it('handles transfer loading', async () => {
const meowSenderUserId = 'sender-id';
const meowRecipientUserId = 'recipient-id';
const amount = '500000000000000000';
const postOwnerId = 'post-owner-id';
const meowAmount = '500000000000000000';

const apiResponse = {
success: true,
Expand All @@ -200,10 +200,10 @@ describe(transferMeow, () => {
};

const { storeState } = await expectSaga(transferMeow, {
payload: { meowSenderUserId, meowRecipientUserId, amount },
payload: { meowSenderUserId, postOwnerId, meowAmount },
})
.withReducer(rootReducer, initialState())
.provide([[call(transferMeowAPI, meowSenderUserId, meowRecipientUserId, amount), apiResponse]])
.provide([[call(transferMeowAPI, meowSenderUserId, postOwnerId, meowAmount), apiResponse]])
.run();

expect(storeState.rewards.transferLoading).toEqual(false);
Expand Down
6 changes: 3 additions & 3 deletions src/store/rewards/saga.ts
Original file line number Diff line number Diff line change
Expand Up @@ -126,17 +126,17 @@ export function* closeRewardsTooltip() {
export function* transferMeow(action) {
yield put(setTransferError({ error: null }));

const { meowSenderUserId, meowRecipientUserId, amount } = action.payload;
const { meowSenderId, postOwnerId, postMessageId, meowAmount, roomId } = action.payload;

Check failure on line 129 in src/store/rewards/saga.ts

View workflow job for this annotation

GitHub Actions / run-lint

'postMessageId' is assigned a value but never used. Allowed unused vars must match /^_/u

Check failure on line 129 in src/store/rewards/saga.ts

View workflow job for this annotation

GitHub Actions / run-lint

'roomId' is assigned a value but never used. Allowed unused vars must match /^_/u

if (meowSenderUserId === meowRecipientUserId) {
if (meowSenderId === postOwnerId) {
yield put(setTransferError({ error: 'Cannot transfer MEOW to yourself.' }));
return;
}

yield put(setTransferLoading(true));

try {
const result = yield call(transferMeowAPI, meowSenderUserId, meowRecipientUserId, amount);
const result = yield call(transferMeowAPI, meowSenderId, postOwnerId, meowAmount);

if (result.success) {
yield put(setMeow(result.response.senderBalance));
Expand Down

0 comments on commit a7ad5e4

Please sign in to comment.