1{ lib
2, stdenv
3, fetchFromGitHub
4, perl
5, perlPackages
6, postgresql
7, postgresqlTestHook
8, which
9}:
10
11stdenv.mkDerivation (finalAttrs: {
12 pname = "pgtap";
13 version = "1.3.3";
14
15 src = fetchFromGitHub {
16 owner = "theory";
17 repo = "pgtap";
18 rev = "v${finalAttrs.version}";
19 sha256 = "sha256-YgvfLGF7pLVcCKD66NnWAydDxtoYHH1DpLiYTEKHJ0E=";
20 };
21
22 nativeBuildInputs = [ postgresql perl perlPackages.TAPParserSourceHandlerpgTAP which ];
23
24 installPhase = ''
25 install -D {sql/pgtap--${finalAttrs.version}.sql,pgtap.control} -t $out/share/postgresql/extension
26 '';
27
28 passthru.tests.extension = stdenv.mkDerivation {
29 name = "pgtap-test";
30 dontUnpack = true;
31 doCheck = true;
32 nativeCheckInputs = [ postgresqlTestHook (postgresql.withPackages (_: [ finalAttrs.finalPackage ])) ];
33 passAsFile = [ "sql" ];
34 sql = ''
35 CREATE EXTENSION pgtap;
36
37 BEGIN;
38 SELECT plan(1);
39 SELECT pass('Test passed');
40 SELECT * FROM finish();
41 ROLLBACK;
42 '';
43 failureHook = "postgresqlStop";
44 checkPhase = ''
45 runHook preCheck
46 psql -a -v ON_ERROR_STOP=1 -f $sqlPath
47 runHook postCheck
48 '';
49 installPhase = "touch $out";
50 };
51
52 meta = with lib; {
53 description = "A unit testing framework for PostgreSQL";
54 longDescription = ''
55 pgTAP is a unit testing framework for PostgreSQL written in PL/pgSQL and PL/SQL.
56 It includes a comprehensive collection of TAP-emitting assertion functions,
57 as well as the ability to integrate with other TAP-emitting test frameworks.
58 It can also be used in the xUnit testing style.
59 '';
60 maintainers = with maintainers; [ willibutz ];
61 homepage = "https://pgtap.org";
62 inherit (postgresql.meta) platforms;
63 license = licenses.mit;
64 };
65})