# mock-js

Mock server for GoodData UI applications (Analytical Designer and Dashboards).

## How to use:

Install mock-js from private repository:
```sh
yarn add --dev @gooddata/mock-js
```

Create your `mock-schema.json` file:
```js
// mock-schema.json
{
    "project": {
        "title": "My mocked project"
    },
    "groups": [{
        "attributes": [{
            "title": "Account",
            "elements": ["1", "2", "3"]
        }],
        "dateDataSets": [{
            "title": "Activity"
        }, {
            "title": "Opportunity"
        }, {
            "title": "Closed"
        }],
        "metrics": [{
            "title": "# Won"
        }, {
            "title": "# Closed"
        }],
    }, {
        "meta": {
            "type": "csv",
            "identifier": "dataset.1"
        },
        "attributes": [{
            "title": "Attribute A"
        }, {
            "title": "Attribute B"
        }],
        "metrics": [{
            "title": "Metric A"
        }, {
            "title": "Metric B"
        }]
    }],
    // if execution request matches (ignoring localIdentifiers) it responds with saved executionResult
    "afmExecutions": [
        {
            "execution": { ...executeAfmRequestBody },
            "executionResult": { ...executionResultResponseBody }
        }
    ]
}
```

> The execution request, response and result obtained from production or staging server can be converted to mocked
`afmExecutions` record of `mock.setup.js` schema via web based tool hosted at `/mock-builder` endpoint. Apart from
the execution request, response and result the mocked project ID and index of the `mock.setup.js`'s `ISchemaGroup`
group index must be entered. The project information is used to choose the mock project and one of its groups of
measures and attributes that will be used to replace staging measure and attributes URIs in the execution for
the mocked ones.

Register `mock-js` middleware:
```js
// server.js
const register = require('@gooddata/mock-js');
const schema = require('./mock-schema.json');

const config = {
    pollCount: 1
};
module.exports = {
    createMiddleware: function createMiddleware(webpackConfig, webpackOptions) {
        return (app) => {
            return register.default(app, { schema, config });
        };
    }
};
```

## Development

## Development

Install [Node.js](http://nodejs.org) and [Yarn](https://classic.yarnpkg.com)

### Project setup
```sh
yarn install --frozen-lockfile
```

### Building project (with watch)
```sh
yarn dev
```

### Deployment

Package publishing is done via Jenkins Job:

https://checklist.intgdc.com/job/client-libs/job/mock-js-release/

### Running test suite:
```sh
yarn test
```

### Running tslint
```sh
yarn validate
```

### Source code formatting
The source code in the repository is formatted by [Prettier](https://prettier.io/).
The format of the code is validated by our Continuous Integration server and is one of the requirements of successful merge.

Prettier is supported by every major IDE. You can find the list of supported editors and how to configure them [here](https://prettier.io/docs/en/editors.html).

In the case, when your editor is not supported or you don't want to setup the integration, you can run the `yarn prettier-write` command to reformat the code before commit.
