# 🔧 Local setup for development (~20 min)

## 0️ Prepare your machine

A machine with a recent version of [NodeJS](https://nodejs.org) is required (see used version in [Dockerfile](/Dockerfile#L1-L2)).

## 1️ Clone repository and install dependencies

Run the following command to clone this repository and install dependencies.

```shell
git clone https://github.com/lowlighter/metrics.git
cd metrics/
npm install
cp settings.example.json settings.json
```

## 2️ Setup and configure *metrics*

Follow [🏗️ Deploying a web instance (~20 min)](/.github/readme/partials/documentation/setup/web.md) guide except docker-related sections.

Once read, start local instance using the following command:
```shell
npm start
```

## 3️ Start hacking!

Connect to your web server using `http://localhost:{port}` and start hacking!

For quick testing, it is advised to directly craft URLs, rather than using the web interface.

*Example: test a new plugin*
```shell
https://localhost:{port}/username?base=0&newplugin=1&newplugin.option1=hello&newplugin.option2=world)
```

## *️⃣ Testing changes

Testing is done through [jest](https://github.com/facebook/jest) framework.

To avoid consuming APIs requests and causing additional charges on external services, data are [mocked](/tests/mocks/index.mjs) using [JavaScript Proxies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy) and [Faker.js](https://github.com/faker-js/faker) with randomly generated data.

Since tests are pretty long to run, it is advised to just let GitHub Actions do the testing.

