Testing
Unit testing
For testing our solution, we have written a suite of automated unit tests for all our smart contracts. These tests, implemented using Embark and Mocha cover all the smart contract code verify the basic functionality of the application.

Integration testing
We also carried out integration tests, which verify that the Javascript API, smart contracts, and IPFS subsystem work correctly. However, due to the decentralized nature of the application, these are difficult to automate (true testing requires multiple machines, on different networks etc.). In general, we conducted integration tests manually. Example integration tests include:
- Provide a reference. On a different machine, fetch the smart contract field (from Ethereum) and retrieve the linked contents (from IPFS).
- A requests a reference from B. Check that B receives the reference request (blockchain Event).
- A and B: generate identity, with associated public key. A requests a reference from B. B provides an encrypted reference.Check that A can decrypt.
User acceptance testing
For the user interface and overall product, we have conducted user acceptance tests. These involved showing the product to users and to our client, and getting them to complete our use cases. We asked them to rate the experience in terms of ease of use and how intuitive it is. Example test cases:
- Create a new identity
- Request a reference from a different user
- Fulfill an incoming request
- Consult your own records
- See another user's CV
- Create a CV