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
Binary file added .DS_Store
Binary file not shown.
8 changes: 8 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/inspectionProfiles/Project_Default.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions .idea/runConfigurations.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions .idea/take-home-test.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { Drug, Pharmacy } from "./pharmacy";
import { Pharmacy } from "./modules/pharmarcy/pharmacy";
import fs from "fs";
import { Drug } from "./modules/entities/drug";

const drugs = [
new Drug("Doliprane", 20, 30),
Expand Down
7 changes: 7 additions & 0 deletions modules/entities/drug.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
export class Drug {
constructor(name, expiresIn, benefit) {
this.name = name;
this.expiresIn = expiresIn;
this.benefit = benefit;
}
}
98 changes: 98 additions & 0 deletions modules/pharmarcy/pharmacy.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
export class Pharmacy {
constructor(drugs = []) {
this.drugs = drugs;
}
updateBenefitValue() {
this.drugs.map(drugs => {
if (
this._isNotHerbealTea(drugs) &&
this._isNotFervex(drugs) &&
this._isNotMagicPill(drugs) &&
this._isNotDafalgan(drugs) &&
drugs.benefit >= 0 &&
drugs.expiresIn > 0
) {
this._decreaseOfOneBenefit(drugs);
this._decreaseOfOneExpireIn(drugs);
}

if (drugs.expiresIn <= 0 && this._isNotHerbealTea(drugs)) {
this.decreaseBenefitTwice(drugs);
}

if (!this._isNotHerbealTea(drugs)) {
if (drugs.expiresIn < 0) {
this.increaseBenefitTwice(drugs);
}

if (drugs.expiresIn >= 0) {
this._increaseOfOneBenefit(drugs);
this._decreaseOfOneExpireIn(drugs);
}
}

if (!this._isNotFervex(drugs)) {
if (drugs.expiresIn <= 10 && drugs.expiresIn > 5) {
this.increaseBenefitTwice(drugs);
} else if (drugs.expiresIn <= 5 && drugs.expiresIn > 0) {
this.increaseBenefitThird(drugs);
} else {
this._increaseOfOneBenefit(drugs);
}
this._decreaseOfOneExpireIn(drugs);
}

if (!this._isNotDafalgan(drugs)) {
this.decreaseBenefitTwice(drugs);
this._decreaseOfOneExpireIn(drugs);
}

if (drugs.benefit > 50) {
drugs.benefit = 50;
}
});
return this.drugs;
}

// Private Methods

_isNotHerbealTea(drugs) {
return drugs.name !== "Herbal Tea";
}

_isNotFervex(drugs) {
return drugs.name !== "Fervex";
}

_isNotMagicPill(drugs) {
return drugs.name !== "Magic Pill";
}

_decreaseOfOneBenefit(drugs) {
if (drugs.benefit !== 0) drugs.benefit--;
}

_increaseOfOneBenefit(drugs) {
drugs.benefit++;
}

_isNotDafalgan(drugs) {
return drugs.name !== "Dafalgan";
}

_decreaseOfOneExpireIn(drugs) {
drugs.expiresIn--;
}

increaseBenefitThird(drugs) {
drugs.benefit = drugs.benefit + 3;
}

increaseBenefitTwice(drugs) {
drugs.benefit = drugs.benefit + 2;
}

decreaseBenefitTwice(drugs) {
drugs.benefit = drugs.benefit - 2;
}
}
126 changes: 126 additions & 0 deletions modules/pharmarcy/pharmacy.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
import { Pharmacy } from "./pharmacy";
import { Drug } from "../entities/drug";

describe("Pharmacy", () => {
it("should decrease the benefit and expiresIn", () => {
// Arrange
const pharmacy = new Pharmacy([new Drug("test", 2, 3)]);

// Act
const res = pharmacy.updateBenefitValue();

// Assert
expect(res).toEqual([new Drug("test", 1, 2)]);
});

it("should decrease benefit twice when date expired", () => {
// Arrange
const pharmacy = new Pharmacy([new Drug("Test", -1, 10)]);

// Act
const res = pharmacy.updateBenefitValue();

// Assert
expect(res).toEqual([new Drug("Test", -1, 8)]);
});

it("should never have benefit negative", () => {
// Arrange
const pharmacy = new Pharmacy([new Drug("Test", 3, 0)]);

// Act
const res = pharmacy.updateBenefitValue();

// Assert
expect(res).toEqual([new Drug("Test", 2, 0)]);
});

it("should benefit increase twice after expiration date for Herbal Tea", () => {
// Arrange
const pharmacy = new Pharmacy([new Drug("Herbal Tea", -1, 10)]);

// Act
const res = pharmacy.updateBenefitValue();

// Assert
expect(res).toEqual([new Drug("Herbal Tea", -1, 12)]);
});

it("should never have benefit more 50 for Herbal Tea", () => {
// Arrange
const pharmacy = new Pharmacy([new Drug("Herbal Tea", -1, 50)]);

// Act
const res = pharmacy.updateBenefitValue();

// Assert
expect(res).toEqual([new Drug("Herbal Tea", -1, 50)]);
});

it("should never decrease in Benefit and never expires when drug is Magic Pill", () => {
// Arrange
const pharmacy = new Pharmacy([new Drug("Magic Pill", 3, 23)]);

// Act
const res = pharmacy.updateBenefitValue();

// Assert
expect(res).toEqual([new Drug("Magic Pill", 3, 23)]);
});

it("should increase benefit when drug is Fervex", () => {
// Arrange
const pharmacy = new Pharmacy([new Drug("Fervex", 15, 35)]);

// Act
const res = pharmacy.updateBenefitValue();

// Assert
expect(res).toEqual([new Drug("Fervex", 14, 36)]);
});

it("should increase benefit twice when drug is Fervex and date expired between 10 and 5 days left", () => {
// Arrange
const pharmacy = new Pharmacy([new Drug("Fervex", 6, 20)]);

// Act
const res = pharmacy.updateBenefitValue();

// Assert
expect(res).toEqual([new Drug("Fervex", 5, 22)]);
});

it("should increase benefit three times when drug is Fervex and date expired between 5 and 0 days left", () => {
// Arrange
const pharmacy = new Pharmacy([new Drug("Fervex", 4, 20)]);

// Act
const res = pharmacy.updateBenefitValue();

// Assert
expect(res).toEqual([new Drug("Fervex", 3, 23)]);
});

it("should decrease benefit twice when drug is Dafalgan", () => {
// Arrange
const pharmacy = new Pharmacy([new Drug("Dafalgan", 4, 6)]);

// Act
const res = pharmacy.updateBenefitValue();

// Assert
expect(res).toEqual([new Drug("Dafalgan", 3, 4)]);
});

it("should increase benefit when drug is Herbal Tea", () => {
// Arrange
const pharmacy = new Pharmacy([new Drug("Herbal Tea", 45, 6)]);

// Act
const res = pharmacy.updateBenefitValue();

// Assert
expect(res).toEqual([new Drug("Herbal Tea", 44, 7)]);
});

});
2 changes: 1 addition & 1 deletion output.txt
Original file line number Diff line number Diff line change
@@ -1 +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}]
[{"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":49},{"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":48},{"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":47},{"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":46},{"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":45},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":9,"benefit":19},{"name":"Herbal Tea","expiresIn":-1,"benefit":16},{"name":"Fervex","expiresIn":-6,"benefit":44},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":8,"benefit":18},{"name":"Herbal Tea","expiresIn":-1,"benefit":18},{"name":"Fervex","expiresIn":-7,"benefit":43},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":7,"benefit":17},{"name":"Herbal Tea","expiresIn":-1,"benefit":20},{"name":"Fervex","expiresIn":-8,"benefit":42},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":6,"benefit":16},{"name":"Herbal Tea","expiresIn":-1,"benefit":22},{"name":"Fervex","expiresIn":-9,"benefit":41},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":5,"benefit":15},{"name":"Herbal Tea","expiresIn":-1,"benefit":24},{"name":"Fervex","expiresIn":-10,"benefit":40},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":4,"benefit":14},{"name":"Herbal Tea","expiresIn":-1,"benefit":26},{"name":"Fervex","expiresIn":-11,"benefit":39},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":3,"benefit":13},{"name":"Herbal Tea","expiresIn":-1,"benefit":28},{"name":"Fervex","expiresIn":-12,"benefit":38},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":2,"benefit":12},{"name":"Herbal Tea","expiresIn":-1,"benefit":30},{"name":"Fervex","expiresIn":-13,"benefit":37},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":1,"benefit":11},{"name":"Herbal Tea","expiresIn":-1,"benefit":32},{"name":"Fervex","expiresIn":-14,"benefit":36},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":0,"benefit":8},{"name":"Herbal Tea","expiresIn":-1,"benefit":34},{"name":"Fervex","expiresIn":-15,"benefit":35},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":0,"benefit":6},{"name":"Herbal Tea","expiresIn":-1,"benefit":36},{"name":"Fervex","expiresIn":-16,"benefit":34},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":0,"benefit":4},{"name":"Herbal Tea","expiresIn":-1,"benefit":38},{"name":"Fervex","expiresIn":-17,"benefit":33},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":0,"benefit":2},{"name":"Herbal Tea","expiresIn":-1,"benefit":40},{"name":"Fervex","expiresIn":-18,"benefit":32},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":0,"benefit":0},{"name":"Herbal Tea","expiresIn":-1,"benefit":42},{"name":"Fervex","expiresIn":-19,"benefit":31},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":0,"benefit":-2},{"name":"Herbal Tea","expiresIn":-1,"benefit":44},{"name":"Fervex","expiresIn":-20,"benefit":30},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":0,"benefit":-4},{"name":"Herbal Tea","expiresIn":-1,"benefit":46},{"name":"Fervex","expiresIn":-21,"benefit":29},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":0,"benefit":-6},{"name":"Herbal Tea","expiresIn":-1,"benefit":48},{"name":"Fervex","expiresIn":-22,"benefit":28},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":0,"benefit":-8},{"name":"Herbal Tea","expiresIn":-1,"benefit":50},{"name":"Fervex","expiresIn":-23,"benefit":27},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":0,"benefit":-10},{"name":"Herbal Tea","expiresIn":-1,"benefit":50},{"name":"Fervex","expiresIn":-24,"benefit":26},{"name":"Magic Pill","expiresIn":15,"benefit":40}],[{"name":"Doliprane","expiresIn":0,"benefit":-12},{"name":"Herbal Tea","expiresIn":-1,"benefit":50},{"name":"Fervex","expiresIn":-25,"benefit":25},{"name":"Magic Pill","expiresIn":15,"benefit":40}]
Loading