#!/bin/sh
set -e

TESTDIR="$(readlink -f "$(dirname "$0")")"
. "$TESTDIR/framework"

setupenvironment
configarchitecture 'i386'

# simple case
insertinstalledpackage 'aaa' 'all' '1'
insertinstalledpackage 'ddd' 'all' '1'
insertpackage 'unstable' 'aaa' 'all' '1'
insertpackage 'unstable' 'ddd' 'all' '1'
insertpackage 'unstable' 'yyy' 'all' '1'
insertpackage 'unstable' 'zzz' 'all' '1:1'
insertpackage 'unstable' 'simple' 'all' '1' 'Recommends: aaa, bbb
Suggests: ccc, ddd'
insertpackage 'unstable' 'orgroup' 'all' '1' 'Recommends: aaa | bbb
Suggests: ccc | ddd'
insertpackage 'unstable' 'orgroup2' 'all' '1' 'Recommends: xxx | yyy
Suggests: yyy | zzz'
insertpackage 'unstable' 'orgroup3' 'all' '1' 'Recommends: xxx | yyy
Suggests: yyy | zzz'
insertpackage 'unstable' 'orgroup4' 'all' '1' 'Recommends: xxx
Suggests: zzz'
insertpackage 'unstable' 'versionedor' 'all' '1' 'Recommends: aaa (>> 2) | bbb
Suggests: ccc | ddd (>> 2)'

setupaptarchive

testsuccessequal 'Reading package lists...
Building dependency tree...
Suggested packages:
  ccc
Recommended packages:
  bbb
The following NEW packages will be installed:
  simple
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Inst simple (1 unstable [all])
Conf simple (1 unstable [all])' aptget install simple -s --install-recommends --install-suggests
testsuccessequal 'Reading package lists...
Building dependency tree...
Suggested packages:
  ccc
Recommended packages:
  bbb
The following NEW packages will be installed:
  simple
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Inst simple (1 unstable [all])
Conf simple (1 unstable [all])' aptget install simple -s --no-install-recommends
testsuccessequal 'Reading package lists...
Building dependency tree...
Suggested packages:
  ccc
Recommended packages:
  aaa bbb
The following packages will be REMOVED:
  aaa
The following NEW packages will be installed:
  simple
0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
Remv aaa [1]
Inst simple (1 unstable [all])
Conf simple (1 unstable [all])' aptget install simple aaa- -s --no-install-recommends
testsuccessequal 'Reading package lists...
Building dependency tree...
The following NEW packages will be installed:
  orgroup
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Inst orgroup (1 unstable [all])
Conf orgroup (1 unstable [all])' aptget install orgroup -s --no-install-recommends
testsuccessequal 'Reading package lists...
Building dependency tree...
Recommended packages:
  aaa | bbb
The following packages will be REMOVED:
  aaa
The following NEW packages will be installed:
  orgroup
0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
Remv aaa [1]
Inst orgroup (1 unstable [all])
Conf orgroup (1 unstable [all])' aptget install orgroup aaa- -s --no-install-recommends
testsuccessequal 'Reading package lists...
Building dependency tree...
Suggested packages:
  yyy | zzz
Recommended packages:
  xxx | yyy
The following NEW packages will be installed:
  orgroup2
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Inst orgroup2 (1 unstable [all])
Conf orgroup2 (1 unstable [all])' aptget install orgroup2 -s --no-install-recommends
testsuccessequal 'Reading package lists...
Building dependency tree...
Suggested packages:
  yyy | zzz
Recommended packages:
  xxx | yyy
The following NEW packages will be installed:
  orgroup2 orgroup3
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Inst orgroup2 (1 unstable [all])
Inst orgroup3 (1 unstable [all])
Conf orgroup2 (1 unstable [all])
Conf orgroup3 (1 unstable [all])' aptget install orgroup2 orgroup3 -s --no-install-recommends
testsuccessequal 'Reading package lists...
Building dependency tree...
Suggested packages:
  yyy | zzz zzz
Recommended packages:
  xxx | yyy xxx
The following NEW packages will be installed:
  orgroup2 orgroup4
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Inst orgroup2 (1 unstable [all])
Inst orgroup4 (1 unstable [all])
Conf orgroup2 (1 unstable [all])
Conf orgroup4 (1 unstable [all])' aptget install orgroup2 orgroup4 -s --no-install-recommends
testsuccessequal 'Reading package lists...
Building dependency tree...
Suggested packages:
   yyy (1)
   | zzz (1:1)
   zzz (1:1)
Recommended packages:
   xxx
   | yyy (1)
   xxx
The following NEW packages will be installed:
   orgroup2 (1)
   orgroup4 (1)
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Inst orgroup2 (1 unstable [all])
Inst orgroup4 (1 unstable [all])
Conf orgroup2 (1 unstable [all])
Conf orgroup4 (1 unstable [all])' aptget install orgroup2 orgroup4 -s -V --no-install-recommends
testsuccessequal 'Reading package lists...
Building dependency tree...
Suggested packages:
   zzz (1:1)
Recommended packages:
   xxx
The following NEW packages will be installed:
   orgroup2 (1)
   orgroup4 (1)
   yyy (1)
0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Inst orgroup2 (1 unstable [all])
Inst orgroup4 (1 unstable [all])
Inst yyy (1 unstable [all])
Conf orgroup2 (1 unstable [all])
Conf orgroup4 (1 unstable [all])
Conf yyy (1 unstable [all])' aptget install orgroup2 orgroup4 yyy -s -V --no-install-recommends
testsuccessequal 'Reading package lists...
Building dependency tree...
Suggested packages:
  ccc | ddd
Recommended packages:
  aaa | bbb
The following NEW packages will be installed:
  versionedor
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Inst versionedor (1 unstable [all])
Conf versionedor (1 unstable [all])' aptget install versionedor -s --no-install-recommends

SHOWSUGGEST='Reading package lists...
Building dependency tree...
Suggested packages:
  zzz
Recommended packages:
  xxx
The following NEW packages will be installed:
  orgroup4
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Inst orgroup4 (1 unstable [all])
Conf orgroup4 (1 unstable [all])'
INSTSUGGEST='Reading package lists...
Building dependency tree...
The following additional packages will be installed:
  zzz
Recommended packages:
  xxx
The following NEW packages will be installed:
  orgroup4 zzz
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Inst orgroup4 (1 unstable [all])
Inst zzz (1:1 unstable [all])
Conf orgroup4 (1 unstable [all])
Conf zzz (1:1 unstable [all])'
testsuccessequal "$SHOWSUGGEST" aptget install orgroup4 -s
testsuccessequal "$INSTSUGGEST" aptget install orgroup4 --install-suggests -s
echo 'Binary::apt-get::APT::Install-Suggests "true";' > rootdir/etc/apt/apt.conf.d/99binaryspecific.conf
testsuccessequal "$INSTSUGGEST" aptget install orgroup4 -s
testsuccessequal "$SHOWSUGGEST" apt install orgroup4 -s
testsuccessequal "$SHOWSUGGEST" aptget install orgroup4 -s --no-install-suggests
