# Semana 4: especificaciones, contratos, invariantes y tipos; design docs y
# desarrollo guiado por especificaciones. Se usa dentro del contenedor del
# curso (./env/run.sh desde la carpeta del curso).
#
#   make            copia Kallpa en build/kallpa (sin la base de datos): las
#                   revisiones del laboratorio trabajan sobre copias, nunca
#                   sobre kallpa/
#   make test       corre las pruebas de los ejemplos del capítulo (*.test.ts),
#                   que importan el código de Kallpa sin modificarlo, y las del
#                   laboratorio si está la carpeta solution/
#   make typecheck  revisa los tipos con tsc
#   make errores    muestra los errores de tsc de los archivos de bad/, que
#                   fallan a propósito
#   make demos      corre las pruebas de demos/, que fallan a propósito
#   make clean      borra build/
#
# El pedido y el template del laboratorio están en horas-posibles.md.

KALLPA ?= ../../kallpa
# Las pruebas de aceptación del laboratorio (possible-start-hours.test.ts)
# importan desde una copia de Kallpa (../src/domain/...): no se corren aquí.
TESTS := $(filter-out possible-start-hours.test.ts,$(wildcard *.test.ts))

.PHONY: all test typecheck errores demos clean

all: build/kallpa/package.json

build/kallpa/package.json: $(wildcard $(KALLPA)/src/*.ts $(KALLPA)/src/*/*.ts $(KALLPA)/test/*.ts $(KALLPA)/*.json $(KALLPA)/*.js $(KALLPA)/Makefile)
	rm -rf build/kallpa
	mkdir -p build
	cp -r $(KALLPA) build/kallpa
	rm -rf build/kallpa/data build/kallpa/node_modules
	mkdir -p build/kallpa/data

test: all
	node --test $(TESTS)
	@if [ -f solution/acceptance.test.ts ]; then \
		node --test solution/acceptance.test.ts; \
	elif [ -f possible-start-hours.test.ts ] || [ -f solution/possible-start-hours.test.ts ]; then \
		echo "(las pruebas de aceptación de possibleStartHours se corren en su copia de Kallpa: ver horas-posibles.md)"; \
	else \
		echo "(sin solution/: las pruebas de aceptación del laboratorio se publican al final del laboratorio)"; \
	fi

typecheck:
	tsc -p .

errores:
	-tsc -p bad

demos:
	-node --test demos/*.test.ts

clean:
	rm -rf build
