README.md
# Report Factory
[![Build Status](https://travis-ci.org/igor-starostenko/report_factory.svg?branch=master)](https://travis-ci.org/igor-starostenko/report_factory)
[![Maintainability](https://api.codeclimate.com/v1/badges/5dcc1e927ff6ed345791/maintainability)](https://codeclimate.com/github/igor-starostenko/report_factory/maintainability)
[![Test Coverage](https://api.codeclimate.com/v1/badges/5dcc1e927ff6ed345791/test_coverage)](https://codeclimate.com/github/igor-starostenko/report_factory/test_coverage)
*Report Factory* is a storage for your test reports with intuitive API to manage all your projects test results.
The provided API are based on the [JSON API](http://jsonapi.org) convention.
Currently migrating to [GraphQL](https://graphql.org).
## Getting Started
Follow these [instructions](https://github.com/igor-starostenko/report_factory/blob/master/setup/INSTRUCTIONS.md) to get *Report Factory* running with *Docker*. The configuration is ready for production.
The image of this project can be pulled from [Dockerhub](https://hub.docker.com/r/reportfactory/server/):
```bash
docker pull reportfactory/server
```
## Preconditions
- Add `Content-Type` header with `application/vnd.api+json`
- Add your account's `X-API-KEY` to header
## Available API
### Users
To login and get your `X-API-KEY`:
_POST_ `/api/v1/users/login`
```json
{
"data":{
"type":"users",
"attributes":{
"email":"new_user@mailinator.com",
"password":"Password1"
}
}
}
```
---
To return your user:
_GET_ `/api/v1/user`
---
To return all registered users:
_GET_ `/api/v1/users`
---
To create a user (Admin only):
_POST_ `/api/v1/users/create`
```json
{
"data":{
"type":"users",
"attributes":{
"name":"UserName",
"email":"new_user@mailinator.com",
"password":"Password1",
"type":"Tester"
}
}
}
```
---
To update a user (Admin only):
_PUT_ `/api/v1/users/:id`
```json
{
"data":{
"type":"users",
"attributes":{
"name":"UpdatedName",
"email":"updated_user@mailinator.com"
}
}
}
```
*Note:* You can promote user to Admin by passing `"type":"Admin"`
---
To get user information:
_GET_ `/api/v1/users/:id`
---
To get all reports of a user:
_GET_ `/api/v1/users/:id/reports`
---
To get all RSpec reports of a user:
_GET_ `/api/v1/users/:id/reports/rspec`
---
To delete a user (Admin only):
_DELETE_ `/api/v1/users/:id`
---
### Projects
To return all available projects:
_GET_ `/api/v1/projects`
---
To create a new project (Admin only):
_POST_ `/api/v1/projects`
```json
{
"data":{
"type":"project",
"attributes":{
"project_name":"MyAwesomeProject"
}
}
}
```
---
To get project by name:
_GET_ `/api/v1/projects/:project_name`
---
To update a project:
_PUT_ `/api/v1/projects/:project_name`
```json
{
"data":{
"type":"project",
"attributes":{
"project_name":"UpdatedProjectName"
}
}
}
```
---
To delete a project (Admin only):
_DELETE_ `/api/v1/projects/:project_name`
### Project Reports
To return all reports within a project:
_GET_ `/api/v1/projects/:project_name/reports`
---
To get all RSpec reports within a project:
_GET_ `/api/v1/projects/:project_name/reports/rspec`
---
To submit an RSpec report:
_POST_ `/api/v1/projects/:project_name/reports/rspec`
```json
{
"data": {
"type": "rspec_report",
"attributes": {
"version": "3.7.0",
"examples": [
{
"id": "./spec/routing/routes_spec.rb[1:4:1]",
"description": "routes GET /api/v1/projects/:project_name/reports/rspecto rspec_reports#index",
"full_description": "routing /api/v1/projects/:project_name/reports/rspec routes GET /api/v1/projects/:project_name/reports/rspecto rspec_reports#index",
"status": "passed",
"file_path": "./spec/routing/routes_spec.rb",
"line_number": 59,
"run_time": 0.001341,
"pending_message": null,
},
{
"id": "./spec/requests/rspec_reports_api_spec.rb[1:1:1]",
"description": "gets all rspec reports within project",
"full_description": "RspecReports GET index gets all rspec reports within project",
"status": "failed",
"file_path": "./spec/requests/rspec_reports_api_spec.rb",
"line_number": 11,
"run_time": 0.032876,
"pending_message": null,
"exception": {
"class": "RSpec::Expectations::ExpectationNotMetError",
"message": "\nexpected: 200\n got: 204\n\n(compared using ==)\n",
"backtrace": [
"./gems/rspec-support-3.7.0/lib/rspec/support.rb:97:in `block in \u003cmodule:Support\u003e'",
"./gems/rspec-support-3.7.0/lib/rspec/support.rb:106:in `notify_failure'",
"./gems/rspec-expectations-3.7.0/lib/rspec/expectations/fail_with.rb:35:in `fail_with'",
"./gems/rspec-expectations-3.7.0/lib/rspec/expectations/handler.rb:38:in `handle_failure'",
"./gems/rspec-expectations-3.7.0/lib/rspec/expectations/handler.rb:50:in `block in handle_matcher'",
]
}
}
]
"summary": {
"duration": 0.747558,
"example_count": 2,
"failure_count": 1,
"pending_count": 0,
"errors_outside_of_examples_count": 0
},
"summary_line": "2 examples, 1 failures",
}
}
}
```
---
To view an existing RSpec reports within a project:
_GET_ `/api/v1/projects/:project_name/reports/rspec/:id`
### Reports
To return all reports:
_GET_ `/api/v1/reports`
---
To get all RSpec reports:
_GET_ `/api/v1/reports/rspec`
### Scenarios
To return all scenarios:
_GET_ `/api/v1/scenarios`
---
To get all scenarios by project:
_GET_ `/api/v1/projects/:project_name/scenarios`
## GraphQL
Clients can fetch data using GraphQL from `/graphql' endpoint. Just make sure you pass `X-API-KEY` header with your user token.
To acccess GraphiQL in development you need to set the token in the environment variable:
```bash
export X_API_KEY={your_x_api_key}
```
Then youl'll be able to access `/graphiql` on your localhost.
## License
The application is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).