#!/usr/bin/perl
use strict;
use warnings;

# this is hardcoded; change it if needed
use lib "src/lib";
use Gitolite::Test;

# assigning roles to groups instead of users
# ----------------------------------------------------------------------

try "plan 31";

try "DEF POK = !/DENIED/; !/failed to push/";

confreset; confadd '
    @leads = u1 u2
    @devs = u1 u2 u3 u4

    @gbar = bar/CREATOR/..*
    repo    @gbar
        C               =   @leads
        RW+             =   CREATOR
        RW              =   WRITERS
        R               =   READERS
';

try "ADMIN_PUSH set1; !/FATAL/" or die text();

try "

    # u1 auto-creates a repo
    glt ls-remote u1 file:///bar/u1/try1
        /Initialized empty Git repository in .*/bar/u1/try1.git//
    # default permissions for u2 and u4
    glt info u1 -lc
        /R W *\tbar/u1/try1\tu1/
    glt info u2 -lc
        !/R W *\tbar/u1/try1\tu1/
    glt info u4 -lc
        !/R W *\tbar/u1/try1\tu1/

    # \@leads can RW try1
    echo WRITERS \@leads | glt perms u1 -c bar/u1/try1; ok
    glt info u1 -lc
        /R W *\tbar/u1/try1\tu1/
    glt info u2 -lc
        /R W *\tbar/u1/try1\tu1/
    glt info u4 -lc
        !/R W *\tbar/u1/try1\tu1/

    # \@devs can R try1
    echo READERS \@devs | glt perms u1 -c bar/u1/try1; ok
    glt perms u1 bar/u1/try1 -l
        /READERS \@devs/
        !/WRITERS \@leads/

    glt info u1 -lc
        /R W *\tbar/u1/try1\tu1/

    glt info u2 -lc
        !/R W *\tbar/u1/try1\tu1/
        /R *\tbar/u1/try1\tu1/

    glt info u4 -lc
        !/R W *\tbar/u1/try1\tu1/
        /R *\tbar/u1/try1\tu1/

# combo of previous 2
    /usr/bin/printf 'READERS \@devs\\nWRITERS \@leads\\n' | glt perms u1 -c bar/u1/try1; ok
    glt perms u1 bar/u1/try1 -l
        /READERS \@devs/
        /WRITERS \@leads/
    glt info u1 -lc
        /R W *\tbar/u1/try1\tu1/
    glt info u2 -lc
        /R W *\tbar/u1/try1\tu1/
    glt info u4 -lc
        !/R W *\tbar/u1/try1\tu1/
        /R *\tbar/u1/try1\tu1/
";
