# Semana 10: pruebas basadas en propiedades, fuzzing, mutación y oráculos. Se usa
# dentro del contenedor del curso (./env/run.sh desde la carpeta del curso).
#
#   make              crea build/ para las copias que usan los ejemplos
#   make test         revisa los tipos (tsc), corre ESLint y las pruebas
#                     (*.test.ts), que comprueban lo que dice el capítulo: las
#                     demostraciones que fallan a propósito, Stryker sobre
#                     mutation/ y el material del laboratorio. Si está la carpeta
#                     solution/, recorre también el laboratorio completo
#   make demo D=...   corre una demostración de demos/ (D=split-naive), que falla
#                     a propósito
#   make generadores  mide qué producen los generadores del capítulo
#   make fuzz         fuzzing de POST /api/bookings con dos generadores
#   make cobertura    la cobertura de las pruebas de mutation/
#   make mutantes     Stryker sobre mutation/: S=weak, strong, marked o window
#   make clean        borra build/
#
# Para el laboratorio: stryker.config.json y agente-*.diff. Los ejemplos leen la
# Kallpa del curso (../../kallpa) sin modificarla.

S ?= weak
D ?= split-naive

.PHONY: all test demo generadores fuzz cobertura mutantes clean

all:
	mkdir -p build

test: all
	tsc -p .
	eslint .
	node --test "*.test.ts"
	@if [ -f solution/verify.sh ]; then \
		bash solution/verify.sh; \
	else \
		echo "(sin solution/: el recorrido completo del laboratorio no se publica)"; \
	fi

demo:
	-node --test demos/$(D).demo.test.ts

generadores:
	node generators.ts

fuzz:
	node fuzz-bookings.ts

cobertura:
	cd mutation && node --test --experimental-test-coverage voucher.weak.test.ts
	cd mutation && node --test --experimental-test-coverage voucher.test.ts
	cd mutation && node --test --experimental-test-coverage booking-window.test.ts

mutantes: all
	rm -rf build/mutation
	cp -r mutation build/mutation
	cd build/mutation && stryker run stryker.$(S).json

clean:
	rm -rf build
