# file      : tests/rep-info.test
# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd
# license   : MIT; see accompanying LICENSE file

.include common.test auth.test remote.test remote-git.test

# Source repository:
#
# rep-info
# |-- testing             -> stable (complement), ../foo/testing (prerequisite)
# |   |-- foo-1.tar.gz
# |   `-- repositories.manifest
# |
# `-- git
#     |-- libbar.git      -> style-basic.git (prerequisite)
#     `-- style-basic.git

# Prepare repositories used by tests if running in the local mode.
#
+if ($remote != true)
  rc = $rep_create 2>!

  # Create the unsigned 'testing' repository.
  #
  cp -r $src/testing $out/testing
  $rc $out/testing &$out/testing/packages.manifest

  # Create the signed 'testing' repository.
  #
  cp -r $src/testing $out/signed
  cat <<<$cert_manifest >+$out/signed/repositories.manifest

  $rc --key $key $out/signed &$out/signed/packages.manifest \
                             &$out/signed/signature.manifest

  # Create git repositories.
  #
  $git_extract $src/git/libbar.tar
  $git_extract $src/git/style-basic.tar &$out_git/state0/***
end

test.options += --auth all --trust-yes

: no-location
:
$* 2>>EOE != 0
error: repository location argument expected
  info: run 'bpkg help rep-info' for more information
EOE

: default
:
{
  : unsigned
  :
  $* $rep/testing >>"EOO"
  pkg:build2.org/rep-info/testing ($rep/testing)
  prerequisite pkg:build2.org/foo/testing ($rep_root/foo/testing)
  complement pkg:build2.org/rep-info/stable ($rep/stable)

  foo/1
  EOO

  : signed
  :
  $* $rep/signed >>"EOO"
  pkg:build2.org/rep-info/signed ($rep/signed)
  CN=build2.org/O=Code Synthesis/info@build2.org
  $cert_fp
  prerequisite pkg:build2.org/foo/testing ($rep_root/foo/testing)
  complement pkg:build2.org/rep-info/stable ($rep/stable)

  foo/1
  EOO
}

: name
:
$* --name $rep/testing >"pkg:build2.org/rep-info/testing ($rep/testing)"

: packages
:
{
  : list
  :
  $* --packages $rep/testing >>EOO

  foo/1
  EOO

  : manifest
  :
  $* --packages --manifest $rep/testing >>EOO
  : 1
  name: foo
  version: 1
  summary: The "Foo" utility
  license: MIT
  url: http://www.example.org/foo
  email: foo-users@example.org
  location: foo-1.tar.gz
  sha256sum: fee330a362a4f87ff42a954aa305b6446d541b7b60000ebcd2fbf68f2b1ae58e
  EOO
}

: repositories
:
{
  : list
  :
  $* --repositories $rep/testing >>"EOO"
  prerequisite pkg:build2.org/foo/testing ($rep_root/foo/testing)
  complement pkg:build2.org/rep-info/stable ($rep/stable)
  EOO

  : manifest
  :
  $* --repositories --manifest $rep/testing >>EOO
  : 1
  location: ../../foo/testing
  type: pkg
  :
  location: ../stable
  type: pkg
  role: complement
  :
  EOO
}

: cert
:
{
  test.arguments += $rep/signed

  $* --cert-fingerprint  >"$cert_fp"        : fingerprint
  $* --cert-name         >'name:build2.org' : name
  $* --cert-organization >'Code Synthesis'  : organization
  $* --cert-email        >'info@build2.org' : email
}

: git-rep
:
if ($git_supported != true)
{
  # Skip git repository tests.
  #
}
else
{
  rep = "$rep_git/state0"
  test.redirects += 2>!

  : version-module
  :
  : Version module is enabled for the project.
  :
  $* "$rep/style-basic.git#master" >>~%EOO%
  %git:.+style-basic#master .+style-basic.git#master%

  %style-basic/1\.1\.0-a\.0\.\d+\..+%
  EOO

  : manifest-lists
  :
  : The packages.manifest and repositories.manifest files are present in the
  : repository root.
  :
  $* "$rep/libbar.git#master" >>~%EOO%
  %git:.+libbar#master .+libbar.git#master%
  %prerequisite git:.+style-basic#stable .+style-basic.git#stable%

  libbar/1.0.0
  libmbar/1.0.0
  EOO

  : repository-manifests
  :
  : Here we test that the base repository manifest that comes from the stable
  : branch is printed because the stable head commit is newer that of the
  : master branch.
  :
  $* -r -m "$rep/style-basic.git#stable,master" >>~%EOO%
  : 1
  email: user@example.com
  EOO
}