-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
20 changed files
with
278 additions
and
23 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,3 +2,4 @@ app/bundle.api.js* | |
app/stats.json | ||
migrations | ||
default-db.sqlite | ||
mocks/budgets/**/* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
// Jest Snapshot v1, https://goo.gl/fbAQLP | ||
|
||
exports[`API setup and teardown successfully loads budget 1`] = ` | ||
Array [ | ||
"2016-10", | ||
"2016-11", | ||
"2016-12", | ||
"2017-01", | ||
"2017-02", | ||
"2017-03", | ||
"2017-04", | ||
"2017-05", | ||
"2017-06", | ||
"2017-07", | ||
"2017-08", | ||
"2017-09", | ||
"2017-10", | ||
"2017-11", | ||
"2017-12", | ||
] | ||
`; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
module.exports = { | ||
moduleFileExtensions: [ | ||
'testing.js', | ||
'testing.ts', | ||
'api.js', | ||
'api.ts', | ||
'api.tsx', | ||
'electron.js', | ||
'electron.ts', | ||
'mjs', | ||
'js', | ||
'ts', | ||
'tsx', | ||
'json', | ||
], | ||
testEnvironment: 'node', | ||
testPathIgnorePatterns: ['/node_modules/'], | ||
watchPathIgnorePatterns: ['<rootDir>/mocks/budgets/'], | ||
setupFilesAfterEnv: ['<rootDir>/../loot-core/src/mocks/setup.ts'], | ||
transformIgnorePatterns: ['/node_modules/'], | ||
transform: { | ||
'^.+\\.(t|j)sx?$': '@swc/jest', | ||
}, | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,147 @@ | ||
import * as fs from 'fs/promises'; | ||
import * as path from 'path'; | ||
|
||
import * as api from './index'; | ||
|
||
const budgetName = 'test-budget'; | ||
|
||
beforeEach(async () => { | ||
// we need real datetime if we are going to mix new timestamps with our mock data | ||
global.restoreDateNow(); | ||
|
||
const budgetPath = path.join(__dirname, '/mocks/budgets/', budgetName); | ||
await fs.rm(budgetPath, { force: true, recursive: true }); | ||
|
||
await createTestBudget('default-budget-template', budgetName); | ||
await api.init({ | ||
dataDir: path.join(__dirname, '/mocks/budgets/'), | ||
}); | ||
}); | ||
|
||
afterEach(async () => { | ||
global.currentMonth = null; | ||
await api.shutdown(); | ||
}); | ||
|
||
async function createTestBudget(templateName: string, name: string) { | ||
const templatePath = path.join( | ||
__dirname, | ||
'/../loot-core/src/mocks/files', | ||
templateName, | ||
); | ||
const budgetPath = path.join(__dirname, '/mocks/budgets/', name); | ||
|
||
await fs.mkdir(budgetPath); | ||
await fs.copyFile( | ||
path.join(templatePath, 'metadata.json'), | ||
path.join(budgetPath, 'metadata.json'), | ||
); | ||
await fs.copyFile( | ||
path.join(templatePath, 'db.sqlite'), | ||
path.join(budgetPath, 'db.sqlite'), | ||
); | ||
} | ||
|
||
describe('API setup and teardown', () => { | ||
// apis: loadBudget, getBudgetMonths | ||
test('successfully loads budget', async () => { | ||
await expect(api.loadBudget(budgetName)).resolves.toBeUndefined(); | ||
|
||
await expect(api.getBudgetMonths()).resolves.toMatchSnapshot(); | ||
}); | ||
}); | ||
|
||
describe('API CRUD operations', () => { | ||
beforeEach(async () => { | ||
// load test budget | ||
await api.loadBudget(budgetName); | ||
}); | ||
|
||
// apis: setBudgetAmount, setBudgetCarryover, getBudgetMonth | ||
test('Budgets: successfully update budgets', async () => { | ||
const month = '2023-10'; | ||
global.currentMonth = month; | ||
|
||
// create some new categories to test with | ||
const groupId = await api.createCategoryGroup({ | ||
name: 'tests', | ||
}); | ||
const categoryId = await api.createCategory({ | ||
name: 'test-budget', | ||
group_id: groupId, | ||
}); | ||
|
||
await api.setBudgetAmount(month, categoryId, 100); | ||
await api.setBudgetCarryover(month, categoryId, true); | ||
|
||
const budgetMonth = await api.getBudgetMonth(month); | ||
expect(budgetMonth.categoryGroups).toEqual( | ||
expect.arrayContaining([ | ||
expect.objectContaining({ | ||
id: groupId, | ||
categories: expect.arrayContaining([ | ||
expect.objectContaining({ | ||
id: categoryId, | ||
budgeted: 100, | ||
carryover: true, | ||
}), | ||
]), | ||
}), | ||
]), | ||
); | ||
}); | ||
|
||
//apis: createAccount, getAccounts, updateAccount, closeAccount, deleteAccount, reopenAccount | ||
test('Accounts: successfully complete account operators', async () => { | ||
const accountId1 = await api.createAccount( | ||
{ name: 'test-account1', offbudget: true }, | ||
1000, | ||
); | ||
const accountId2 = await api.createAccount({ name: 'test-account2' }, 0); | ||
let accounts = await api.getAccounts(); | ||
|
||
// accounts successfully created | ||
expect(accounts).toEqual( | ||
expect.arrayContaining([ | ||
expect.objectContaining({ | ||
id: accountId1, | ||
name: 'test-account1', | ||
offbudget: true, | ||
}), | ||
expect.objectContaining({ id: accountId2, name: 'test-account2' }), | ||
]), | ||
); | ||
|
||
await api.updateAccount(accountId1, { offbudget: false }); | ||
await api.closeAccount(accountId1, accountId2, null); | ||
await api.deleteAccount(accountId2); | ||
|
||
// accounts successfully updated, and one of them deleted | ||
accounts = await api.getAccounts(); | ||
expect(accounts).toEqual( | ||
expect.arrayContaining([ | ||
expect.objectContaining({ | ||
id: accountId1, | ||
name: 'test-account1', | ||
closed: true, | ||
offbudget: false, | ||
}), | ||
expect.not.objectContaining({ id: accountId2 }), | ||
]), | ||
); | ||
|
||
await api.reopenAccount(accountId1); | ||
|
||
// the non-deleted account is reopened | ||
accounts = await api.getAccounts(); | ||
expect(accounts).toEqual( | ||
expect.arrayContaining([ | ||
expect.objectContaining({ | ||
id: accountId1, | ||
name: 'test-account1', | ||
closed: false, | ||
}), | ||
]), | ||
); | ||
}); | ||
}); |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
20 changes: 14 additions & 6 deletions
20
...lient/src/components/reports/DateRange.js → ...ient/src/components/reports/DateRange.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.