78 lines
4.1 KiB
Markdown
78 lines
4.1 KiB
Markdown
![Renai](resources/logo.png 'Renai')
|
|
|
|
# レンアイ - Hentai Library Thingy
|
|
|
|
## Development
|
|
|
|
### Quickstart
|
|
|
|
- `npm install`, the postinstall runs
|
|
- `npm run rebuild`
|
|
- might need to install some build tools depending on your platform
|
|
- `npm run watch` for code transpilation (starts watchers)
|
|
- `npm run start`
|
|
|
|
### Git Commits
|
|
|
|
This project uses [Conventional Commits](https://www.conventionalcommits.or) with the following types:
|
|
|
|
| type | description |
|
|
| ---------- | --------------------------------------------------------------------------------------- |
|
|
| `feat` | implementing a new feature or changes an existing one |
|
|
| `remove` | removing an existing feature |
|
|
| `fix` | repairing a feature which does not work correctly |
|
|
| `refactor` | reworking code so that its function does not change (but could have in unexpected ways) |
|
|
| `update` | updating dependencies and associated code changes |
|
|
| `test` | any of the above, but with tests/mocks |
|
|
| `config` | changing configuration (npm scripts, linters, build process) |
|
|
| `meta` | updating something not directly related to function or documentation (e.g. branding) |
|
|
| `doc` | updating documentation, including code comments |
|
|
| `reformat` | rewriting code in a way in which it is impossible for function to change |
|
|
|
|
Always try to split up your changes into coherent commits, a single commit should do a single thing. If your commit needs to do more than one thing it should be labeled with the type coming first in this list.
|
|
|
|
### Database Migrations
|
|
|
|
Migrations are stored in [src/main/migrations](src/main/migrations) and handled by typeorm. Migrations are run on app start inside [database.ts](src/main/services/database.ts).
|
|
|
|
To auto-generate a migration:
|
|
`node_modules/.bin/typeorm migration:generate -n <migration name> -c <connection name>`
|
|
|
|
To create an empty creation which can be filled with custom migration code:
|
|
`node_modules/.bin/typeorm migration:create -n <migration name> -c <connection name>`
|
|
|
|
To run migrations:
|
|
`node_modules/.bin/typeorm migration:run -c <connection name>`
|
|
This is also pre-defined in the npm script `typeorm:migrate`.
|
|
|
|
### Testing
|
|
|
|
The testing framework of choice is [Mocha](https://mochajs.org/). Call `npm run test` to run all tests. Tests are written in typescript and need to be transpiled before testing.
|
|
|
|
- assertion is (mainly) done by [Chai](https://www.chaijs.com/)
|
|
- Electron specific testing is done by [Spectron](https://electronjs.org/spectron)
|
|
- spies, stubs and mocks are provided by [Sinon.JS](https://sinonjs.org/)
|
|
- HTTP server mocking is done by [nock](https://github.com/nock/nock)
|
|
- property based testing is made possible by [fast-check](https://github.com/dubzzz/fast-check)
|
|
|
|
#### Mocks
|
|
|
|
There are 2 ways in which mocks are defined/used:
|
|
|
|
0. for external modules, in [mocks](mocks)
|
|
- uses the [rewiremock](https://github.com/theKashey/rewiremock) package
|
|
- use this only when there is some magic happening like for electron which normally runs in its own node process
|
|
1. for own modules, just beside their test file in [tests](tests)
|
|
- name the file `*.mock.ts` and use existing mock files for orientation on how to build them
|
|
- use sparingly and only when not having a mock makes it more complex e.g. for modules which interact with the file system
|
|
|
|
#### Tagging
|
|
|
|
Mocha does [not have a seperate tagging feature](https://github.com/mochajs/mocha/wiki/Tagging), but it can filter via title. Us the following tags in your test titles:
|
|
|
|
- `@slow` when the test is particularly slow
|
|
|
|
#### Coverage
|
|
|
|
Code coverage is provided by [nyc](https://github.com/istanbuljs/nyc). The detailed code coverage can be found [here](.nyc_output/coverage/index.html) after running the tests (open in browser).
|