Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@

name: test

on:
push:
branches: [ master ]
pull_request:
types: [opened, synchronize, reopened]

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup node 16
uses: actions/setup-node@v2
with:
node-version: 16.x
cache: npm
- run: npm install
- run: npm run lint
- run: npm test
1 change: 1 addition & 0 deletions .nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
16
4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM node:12.10.0-alpine
FROM node:16-alpine

WORKDIR /usr/src

Expand All @@ -7,4 +7,4 @@ RUN yarn install

COPY . /usr/src/

CMD ["yarn", "start"]
CMD ["yarn", "start"]
12 changes: 11 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@
You are a new developer in the Inato team, and your first job is to add a feature to an old existing piece of code.
We recommend spending between 1 hour and 2 hours on the exercise. (Do more if you like 😇, do less if you think you've shown what you want😎)

# Requirements (if you don't want to use Docker)

* node v16, if you have [nvm](https://github.com/nvm-sh/nvm#installing-and-updating), you can use `nvm install && nvm use` to have the proper version

## System specifications

Hi and welcome to the team. We are in the future, and Inato has extended its activities by opening a pharmacy. Your task is to add a new feature to our system so that we can begin distributing a new drug. First an introduction to our system:
Expand Down Expand Up @@ -39,7 +43,7 @@ Please commit as frequently as possible to make the review easier.

## Test

To make sure that you will not break anything in the existing code, we added a log of the simulation in the _output.txt_ file. Make sure that your code is able to generate the same file. You can generate a new file by running one of the following commands:
To make sure that you will not break anything in the existing code, we added a log of the simulation in the _original-output.txt_ file. Make sure that your code is able to generate the same file. You can generate a new file by running one of the following commands:

```sh
yarn start
Expand All @@ -48,3 +52,9 @@ yarn start
```sh
docker-compose up
```

### Comparing with the original output

The command below will execute the script, write an output file and compare it with the _original-output.txt_ file.

`yarn compare`
45 changes: 45 additions & 0 deletions compare.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import { isEqual } from "lodash";
import { join } from "path";
import fs from "fs";

const outputPath = "./output.txt";
const originalOutputPath = "./original-output.txt";

const extractJsonFromFile = path => {
const normalizedPath = join(__dirname, path);

const exists = fs.existsSync(normalizedPath);

if (!exists) {
throw new Error(`file at path ${path} doesn't exist`);
}

const buffer = fs.readFileSync(normalizedPath, {
encoding: "utf8",
flag: "r"
});

// nice trick below to be able to convert into json
return JSON.parse(`[${buffer}]`);
};

try {
const outputData = extractJsonFromFile(outputPath)[0];
const originalData = extractJsonFromFile(originalOutputPath)[0];

let equal = outputData.length === originalData.length;
let count = 0;

while (equal && count < outputData.length) {
equal = isEqual(outputData[count], originalData[count]);
count++;
}

if (equal) {
console.info("outputs are equals, well done!");
} else {
console.info("outputs are not equals, try again.");
}
} catch (error) {
console.error(error.message);
}
63 changes: 63 additions & 0 deletions drug.manager.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import drugs from "./drugs";

const BENEFIT_MAX_THRESHOLD = 50;
const BENEFIT_MIN_THRESHOLD = 0;

const benefitThreasholdGuard = benefit => {
if (benefit > BENEFIT_MAX_THRESHOLD) {
return BENEFIT_MAX_THRESHOLD;
} else if (benefit < BENEFIT_MIN_THRESHOLD) {
return BENEFIT_MIN_THRESHOLD;
}

return benefit;
};

export default {
[drugs.HerbalTea]: ({ benefit, expiresIn }) => ({
updateBenefitValue() {
const newBenefit = expiresIn < 0 ? benefit + 2 : benefit + 1;

return benefitThreasholdGuard(newBenefit);
}
}),

[drugs.MagicPill]: ({ benefit }) => ({
updateBenefitValue() {
return benefitThreasholdGuard(benefit);
},
withoutExpire: true
}),

[drugs.Fervex]: ({ benefit, expiresIn }) => ({
updateBenefitValue() {
let newBenefit = benefit;

if (expiresIn < 0) {
newBenefit = 0;
} else if (expiresIn <= 5) {
newBenefit = benefit + 3;
} else if (expiresIn <= 10) {
newBenefit = benefit + 2;
} else {
newBenefit = benefit + 1;
}

return benefitThreasholdGuard(newBenefit);
}
}),

[drugs.Dafalgan]: ({ benefit, expiresIn }) => ({
updateBenefitValue() {
const newBenefit = expiresIn < 0 ? benefit - 4 : benefit - 2;
return benefitThreasholdGuard(newBenefit);
}
}),

default: ({ benefit, expiresIn }) => ({
updateBenefitValue() {
const newBenefit = expiresIn < 0 ? benefit - 2 : benefit - 1;
return benefitThreasholdGuard(newBenefit);
}
})
};
8 changes: 8 additions & 0 deletions drugs.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
export default {
HerbalTea: "Herbal Tea",
Fervex: "Fervex",
MagicPill: "Magic Pill",
Doliprane: "Doliprane",
Dafalgan: "Dafalgan",
Test: "test"
};
2 changes: 1 addition & 1 deletion index.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ const drugs = [
new Drug("Fervex", 5, 40),
new Drug("Magic Pill", 15, 40)
];

const trial = new Pharmacy(drugs);

const log = [];
Expand All @@ -23,4 +24,3 @@ fs.writeFile("output.txt", log.toString(), err => {
console.log("success");
}
});
/* eslint-enable no-console */
1 change: 1 addition & 0 deletions original-output.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"name":"Doliprane","expiresIn":19,"benefit":29},{"name":"Herbal Tea","expiresIn":9,"benefit":6},{"name":"Fervex","expiresIn":4,"benefit":43},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":18,"benefit":28},{"name":"Herbal Tea","expiresIn":8,"benefit":7},{"name":"Fervex","expiresIn":3,"benefit":46},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":17,"benefit":27},{"name":"Herbal Tea","expiresIn":7,"benefit":8},{"name":"Fervex","expiresIn":2,"benefit":49},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":16,"benefit":26},{"name":"Herbal Tea","expiresIn":6,"benefit":9},{"name":"Fervex","expiresIn":1,"benefit":50},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":15,"benefit":25},{"name":"Herbal Tea","expiresIn":5,"benefit":10},{"name":"Fervex","expiresIn":0,"benefit":50},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":14,"benefit":24},{"name":"Herbal Tea","expiresIn":4,"benefit":11},{"name":"Fervex","expiresIn":-1,"benefit":0},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":13,"benefit":23},{"name":"Herbal Tea","expiresIn":3,"benefit":12},{"name":"Fervex","expiresIn":-2,"benefit":0},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":12,"benefit":22},{"name":"Herbal Tea","expiresIn":2,"benefit":13},{"name":"Fervex","expiresIn":-3,"benefit":0},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":11,"benefit":21},{"name":"Herbal Tea","expiresIn":1,"benefit":14},{"name":"Fervex","expiresIn":-4,"benefit":0},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":10,"benefit":20},{"name":"Herbal Tea","expiresIn":0,"benefit":15},{"name":"Fervex","expiresIn":-5,"benefit":0},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":9,"benefit":19},{"name":"Herbal Tea","expiresIn":-1,"benefit":17},{"name":"Fervex","expiresIn":-6,"benefit":0},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":8,"benefit":18},{"name":"Herbal Tea","expiresIn":-2,"benefit":19},{"name":"Fervex","expiresIn":-7,"benefit":0},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":7,"benefit":17},{"name":"Herbal Tea","expiresIn":-3,"benefit":21},{"name":"Fervex","expiresIn":-8,"benefit":0},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":6,"benefit":16},{"name":"Herbal Tea","expiresIn":-4,"benefit":23},{"name":"Fervex","expiresIn":-9,"benefit":0},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":5,"benefit":15},{"name":"Herbal Tea","expiresIn":-5,"benefit":25},{"name":"Fervex","expiresIn":-10,"benefit":0},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":4,"benefit":14},{"name":"Herbal Tea","expiresIn":-6,"benefit":27},{"name":"Fervex","expiresIn":-11,"benefit":0},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":3,"benefit":13},{"name":"Herbal Tea","expiresIn":-7,"benefit":29},{"name":"Fervex","expiresIn":-12,"benefit":0},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":2,"benefit":12},{"name":"Herbal Tea","expiresIn":-8,"benefit":31},{"name":"Fervex","expiresIn":-13,"benefit":0},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":1,"benefit":11},{"name":"Herbal Tea","expiresIn":-9,"benefit":33},{"name":"Fervex","expiresIn":-14,"benefit":0},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":0,"benefit":10},{"name":"Herbal Tea","expiresIn":-10,"benefit":35},{"name":"Fervex","expiresIn":-15,"benefit":0},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":-1,"benefit":8},{"name":"Herbal Tea","expiresIn":-11,"benefit":37},{"name":"Fervex","expiresIn":-16,"benefit":0},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":-2,"benefit":6},{"name":"Herbal Tea","expiresIn":-12,"benefit":39},{"name":"Fervex","expiresIn":-17,"benefit":0},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":-3,"benefit":4},{"name":"Herbal Tea","expiresIn":-13,"benefit":41},{"name":"Fervex","expiresIn":-18,"benefit":0},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":-4,"benefit":2},{"name":"Herbal Tea","expiresIn":-14,"benefit":43},{"name":"Fervex","expiresIn":-19,"benefit":0},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":-5,"benefit":0},{"name":"Herbal Tea","expiresIn":-15,"benefit":45},{"name":"Fervex","expiresIn":-20,"benefit":0},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":-6,"benefit":0},{"name":"Herbal Tea","expiresIn":-16,"benefit":47},{"name":"Fervex","expiresIn":-21,"benefit":0},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":-7,"benefit":0},{"name":"Herbal Tea","expiresIn":-17,"benefit":49},{"name":"Fervex","expiresIn":-22,"benefit":0},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":-8,"benefit":0},{"name":"Herbal Tea","expiresIn":-18,"benefit":50},{"name":"Fervex","expiresIn":-23,"benefit":0},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":-9,"benefit":0},{"name":"Herbal Tea","expiresIn":-19,"benefit":50},{"name":"Fervex","expiresIn":-24,"benefit":0},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":-10,"benefit":0},{"name":"Herbal Tea","expiresIn":-20,"benefit":50},{"name":"Fervex","expiresIn":-25,"benefit":0},{"name":"Magic Pill","expiresIn":15,"benefit":40}]
Loading