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
8 changes: 8 additions & 0 deletions semana18/aula02/jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
module.exports = {
roots: ["<rootDir>/tests"],
transform: {
"^.+\\.tsx?$": "ts-jest",
},
testRegex: "(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$",
moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json", "node"],
};
5,313 changes: 5,313 additions & 0 deletions semana18/aula02/package-lock.json

Large diffs are not rendered by default.

21 changes: 21 additions & 0 deletions semana18/aula02/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"name": "aula02",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "jest"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@types/jest": "^26.0.22",
"@types/node": "^14.14.41",
"jest": "^26.6.3",
"ts-jest": "^26.5.5",
"ts-node": "^9.1.1",
"ts-node-dev": "^1.1.6",
"typescript": "^4.2.4"
}
}
4 changes: 4 additions & 0 deletions semana18/aula02/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
## Exercício 3
c) A diferença é que conheçemos a o retorno do validator caso fosse outra pessoa que tivesse implementado, controlar o seu resultado.
## Exercício 4
A) Devemos criar da função performAttack para que seja possível se o resultado está dentro do insperado.
35 changes: 35 additions & 0 deletions semana18/aula02/src/types/Caracter.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
export interface createCharacter {
name: string,
vitality: number,
defense: number,
attack: number
}

export const validateCharacter = (
character: createCharacter
): boolean => {
if (!character.name || character.vitality === undefined || character.attack === undefined || character.defense === undefined) {
return false
}
if (character.vitality <= 0 || character.attack <= 0 || character.defense <= 0) {
return false
}

return true
}

export const performAttack = (attacker: createCharacter, defender: createCharacter, validator: (input: createCharacter) => boolean) => {
if (!validator(attacker) || !validator(defender)) {
throw new Error('Invalid character')
}
if (attacker.attack > defender.defense) {
defender.vitality -= attacker.attack - defender.defense
}
if (attacker.attack < defender.defense) {
attacker.vitality += attacker.attack - defender.defense
}
if(attacker.attack === defender.defense){
attacker.vitality = attacker.vitality
defender.vitality = defender.vitality
}
}
174 changes: 174 additions & 0 deletions semana18/aula02/tests/characterTest.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
import { createCharacter, performAttack, validateCharacter } from "../src/types/Caracter"

describe("Testing validade empty proprieties", () => {
test("Should return false for empty name", () => {
const character = {
name: "",
vitality: 1500,
defense: 200,
attack: 100
}

const result = validateCharacter(character)

expect(result).toBe(false)
})
test("Should return false for vitality less than 0", () => {
const character = {
name: "Kratos",
vitality: 0,
defense: 200,
attack: 100
}

const result = validateCharacter(character)
//Espero que a resposta da função seja false
expect(result).toBe(false)
})
test("Should return false for attack less than 0", () => {
const character = {
name: "Kratos",
vitality: 1500,
defense: 200,
attack: 0
}

const result = validateCharacter(character)
//Espero que a resposta da função seja false
expect(result).toBe(false)
})
test("Should return false for defense less than 0", () => {
const character = {
name: "Kratos",
vitality: 1500,
defense: 0,
attack: 200
}

const result = validateCharacter(character)
//Espero que a resposta da função seja false
expect(result).toBe(false)
})
test("Should return false for vitality or defense or attack less than 0", () => {
const character = {
name: "Kratos",
vitality: 1500,
defense: 150,
attack: -200
}

const result = validateCharacter(character)
//Espero que a resposta da função seja false
expect(result).toBe(false)
})
test("Should return true for character valid", () => {
const character = {
name: "Kratos",
vitality: 1500,
defense: 150,
attack: 200
}

//A função validateCharacter retorna ou false ou true somente.
const result = validateCharacter(character)
//Espero que a resposta da função seja false
expect(result).toBe(true)
})
test("Teste Attack Method and Vitality", () => {
//Função de "mentira" para realizar os testes
const validatorMock = jest.fn(() => {
return true
})
const attacker: createCharacter = {
name: "Kratos",
vitality: 1500,
attack: 600,
defense: 200
}
const defender: createCharacter = {
name: "Ricky",
vitality: 1500,
attack: 800,
defense: 400
}

//Executada a função de ataque
performAttack(attacker, defender, validatorMock as any)

expect(defender.vitality).toEqual(1300)
expect(validatorMock).toHaveBeenCalled()
expect(validatorMock).toHaveBeenCalledTimes(2)
expect(validatorMock).toHaveReturnedTimes(2)


})
test("Should Return invalid character error", () => {
const validatorMock = jest.fn(() => {
return false
})
const attacker: createCharacter = {
name: "Kratos",
vitality: 1500,
attack: 600,
defense: 200
}
const defender: createCharacter = {
name: "Ricky",
vitality: 1500,
attack: 800,
defense: 400
}
//Try Catch para verificar error / acerto. Nesse casso vai dar error porque a função validateMock vai mudar para false a resosta
try {
performAttack(attacker, defender, validatorMock as any)
} catch (error) {
expect(error.message).toBe("Invalid character")
expect(validatorMock).toHaveBeenCalled()
expect(validatorMock).toHaveBeenCalledTimes(1)
expect(validatorMock).toHaveReturnedTimes(1)

}
})

test("Should Attacker Vitality reduce with", () =>{
const validatorMock = jest.fn(() => {
return true
})
const attacker: createCharacter = {
name: "Kratos",
vitality: 1500,
attack: 600,
defense: 200
}
const defender: createCharacter = {
name: "Ricky",
vitality: 1500,
attack: 800,
defense: 800
}

performAttack(attacker, defender, validatorMock as any)
expect(attacker.vitality).toEqual(1300)
})
test("Should Vitality not reduce with", () =>{
const validatorMock = jest.fn(() => {
return true
})
const attacker: createCharacter = {
name: "Kratos",
vitality: 1500,
attack: 600,
defense: 200
}
const defender: createCharacter = {
name: "Ricky",
vitality: 1500,
attack: 800,
defense: 600
}

performAttack(attacker, defender, validatorMock as any)
expect(attacker.vitality).toEqual(1500)
})

})
13 changes: 13 additions & 0 deletions semana18/aula02/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"outDir": "./build",
"rootDir": "./",
"strict": true,
"sourceMap": true,
"removeComments": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true
}
}
8 changes: 8 additions & 0 deletions semana18/aula1/jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
module.exports = {
roots: ["<rootDir>/tests"],
transform: {
"^.+\\.tsx?$": "ts-jest",
},
testRegex: "(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$",
moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json", "node"],
}
Loading