Skip to content

Commit

Permalink
テストを機能するように書き換え
Browse files Browse the repository at this point in the history
  • Loading branch information
gentksb committed Feb 5, 2024
1 parent 6bc0308 commit b272c17
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 114 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"step": "bin/splitwise-automation.js"
},
"scripts": {
"test": "jest",
"test": "jest --verbose",
"pree2e": "printf '{\"Parameters\":{\"SPLITWISE_API_KEY_PARAMETER_NAME\":\"%s\",\"SLACK_WEBHOOK_URL\":\"%s\",\"SPLITWISE_GROUP_ID\":\"%s\",\"USER1_ID\":\"%s\",\"USER2_ID\":\"%s\",\"USER1_RATE\":\"%s\",\"USER2_RATE\":\"%s\"}}' $SPLITWISE_API_KEY_PARAMETER_NAME $SLACK_WEBHOOK_URL $SPLITWISE_GROUP_ID $USER1_ID $USER2_ID $USER1_RATE $USER2_RATE > .env.json ",
"e2e": "cdk synth --no-staging && sam local invoke splitwise_expense_automation --no-event -t ./cdk.out/SplitWiseAutomationStack.template.json --env-vars .env.json",
"cdk": "cdk",
Expand Down
186 changes: 73 additions & 113 deletions test/splitExpense.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,31 +18,89 @@ test("always ok", () => {
expect(true).toBeTruthy();
});

// // 異常系テスト
// describe("異常系テスト", () => {
// test("グループIDが含まれていない場合、処理せずエラーログを出力して正常終了する", () => {
// const missingGroupIdData = {
// ...willBeSplittedData,
// group_id: null,
// };
// // ログ出力をJestで追跡する関数
// const logSpy = jest.spyOn(global.console, "error");

// // console.errorの出力をAssertする
// expect(isExpenseEligibleForSplitting(missingGroupIdData)).toBe(false);
// expect(logSpy).toHaveBeenCalled();

// logSpy.mockRestore();
// });
// });

describe("補正対象判定処理テスト", () => {
test("割り勘補正前のデータは処理対象とする", () => {
expect(isExpenseEligibleForSplitting(willBeSplittedData)).toBeTruthy;
test("典型例: 支払い前でデフォルト負担率(50:50)のデータを処理する", () => {
expect(isExpenseEligibleForSplitting(basicExpense)).toBeTruthy();
});

test("100%負担のデータは処理対象としない", () => {
expect(isExpenseEligibleForSplitting(simpleDebtData)).toBeFalsy;
const simpleDebtExpense: components["schemas"]["expense"] = {
...basicExpense,
repayments: [
{
amount: "1000.0",
},
],
users: [
{
owed_share: "0.0",
net_balance: "-1000.0",
},
{
owed_share: "0.0",
net_balance: "0.0",
},
],
};
expect(isExpenseEligibleForSplitting(simpleDebtExpense)).toBeFalsy();
});

test("補正済みデータは処理対象としない", () => {
expect(isExpenseEligibleForSplitting(splittedData)).toBeFalsy;
const reSplittedExpense: components["schemas"]["expense"] = {
...basicExpense,
repayments: [
{
amount: "600.0",
},
],
users: [
{
owed_share: "600.0",
net_balance: "-600.0",
},
{
owed_share: "400.0",
net_balance: "600.0",
},
],
};
expect(isExpenseEligibleForSplitting(reSplittedExpense)).toBeFalsy();
});

test("指定したグループID以外は処理対象としない", () => {
expect(isExpenseEligibleForSplitting(wrongGroupData)).toBeFalsy;
const nonTargetGroupExpense: components["schemas"]["expense"] = {
...basicExpense,
group_id: 88888888,
};
expect(isExpenseEligibleForSplitting(nonTargetGroupExpense)).toBeFalsy();
});
});

describe("割り勘補正処理テスト", () => {
test("割り切ることのできる金額を処理できる", () => {
expect(splitExpense(willBeSplittedData)).toEqual(willBeSplittedDataResult);
expect(splitExpense(basicExpense)).toEqual(reSplittedExpenseBalance);
});
test("割り切れない場合の端数を処理できる", () => {
const oddData = {
...willBeSplittedData,
const oddBlanceExpense = {
...basicExpense,
cost: "999",
repayments: [{ amount: "499" }],
users: [
Expand All @@ -57,16 +115,16 @@ describe("割り勘補正処理テスト", () => {
},
],
};
const oddDataSplitResult = {
const oddExpenseReSplittedBalance = {
payerOwedShare: 400,
nonPayerOwedShare: 599,
};

expect(splitExpense(oddData)).toEqual(oddDataSplitResult);
expect(splitExpense(oddBlanceExpense)).toEqual(oddExpenseReSplittedBalance);
});
});

const willBeSplittedData: components["schemas"]["expense"] = {
const basicExpense: components["schemas"]["expense"] = {
id: 1111111111,
group_id: Number(SPLITWISE_GROUP_ID),
cost: "1000.0",
Expand Down Expand Up @@ -97,110 +155,12 @@ const willBeSplittedData: components["schemas"]["expense"] = {
net_balance: "500.0",
},
],
payment: false,
};

const willBeSplittedDataResult = {
const reSplittedExpenseBalance = {
payerOwedShare:
parseFloat(willBeSplittedData.cost ?? "0") * parseFloat(USER2_RATE ?? "0"),
parseFloat(basicExpense.cost ?? "0") * parseFloat(USER2_RATE ?? "0"),
nonPayerOwedShare:
parseFloat(willBeSplittedData.cost ?? "0") * parseFloat(USER1_RATE),
};

const simpleDebtData: components["schemas"]["expense"] = {
id: 1111111111,
group_id: Number(SPLITWISE_GROUP_ID),
cost: "1000.0",
repayments: [
{
from: Number(USER1_ID),
to: Number(USER2_ID),
amount: "1000.0",
},
],
users: [
{
user: {
id: Number(USER1_ID),
},
user_id: Number(USER1_ID),
paid_share: "0.0",
owed_share: "0.0",
net_balance: "-1000.0",
},
{
user: {
id: Number(USER2_ID),
},
user_id: Number(USER2_ID),
paid_share: "1000.0",
owed_share: "0.0",
net_balance: "0.0",
},
],
};

const splittedData: components["schemas"]["expense"] = {
id: 1111111111,
group_id: Number(SPLITWISE_GROUP_ID),
cost: "1000.0",
repayments: [
{
from: Number(USER1_ID),
to: Number(USER2_ID),
amount: "600.0",
},
],
users: [
{
user: {
id: Number(USER1_ID),
},
user_id: Number(USER1_ID),
paid_share: "0.0",
owed_share: "6000.0",
net_balance: "-600.0",
},
{
user: {
id: Number(USER2_ID),
},
user_id: Number(USER2_ID),
paid_share: "1000.0",
owed_share: "400.0",
net_balance: "600.0",
},
],
};

const wrongGroupData: components["schemas"]["expense"] = {
id: 1111111111,
group_id: 88888888,
cost: "1000.0",
repayments: [
{
from: Number(USER1_ID),
to: Number(USER2_ID),
amount: "600.0",
},
],
users: [
{
user: {
id: Number(USER1_ID),
},
user_id: Number(USER2_ID),
paid_share: "0.0",
owed_share: "6000.0",
net_balance: "-600.0",
},
{
user: {
id: Number(USER2_ID),
},
user_id: Number(USER1_ID),
paid_share: "1000.0",
owed_share: "400.0",
net_balance: "600.0",
},
],
parseFloat(basicExpense.cost ?? "0") * parseFloat(USER1_RATE),
};

0 comments on commit b272c17

Please sign in to comment.