![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 -c ` To create an empty creation which can be filled with custom migration code: `node_modules/.bin/typeorm migration:create -n -c ` To run migrations: `node_modules/.bin/typeorm migration:run -c ` 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).