github.com/drycc/workflow-cli@v1.5.3-0.20240322092846-d4ee25983af9/cmd/perms_test.go (about)

     1  package cmd
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"net/http"
     7  	"testing"
     8  
     9  	"github.com/drycc/workflow-cli/pkg/testutil"
    10  	"github.com/stretchr/testify/assert"
    11  )
    12  
    13  func TestPermsListUsers(t *testing.T) {
    14  	t.Parallel()
    15  	cf, server, err := testutil.NewTestServerAndClient()
    16  	if err != nil {
    17  		t.Fatal(err)
    18  	}
    19  	defer server.Close()
    20  
    21  	server.Mux.HandleFunc("/v2/apps/foo/perms/", func(w http.ResponseWriter, _ *http.Request) {
    22  		testutil.SetHeaders(w)
    23  
    24  		fmt.Fprintf(w, `{
    25    "users": [
    26      "baz",
    27      "bar"
    28    ]
    29  }`)
    30  	})
    31  
    32  	var b bytes.Buffer
    33  	cmdr := DryccCmd{WOut: &b, ConfigFile: cf}
    34  
    35  	err = cmdr.PermsList("foo", false, -1)
    36  	assert.NoError(t, err)
    37  
    38  	assert.Equal(t, testutil.StripProgress(b.String()), `USERNAME    ADMIN 
    39  baz         false    
    40  bar         false    
    41  `, "output")
    42  }
    43  
    44  func TestPermsListUsersLimit(t *testing.T) {
    45  	t.Parallel()
    46  	cf, server, err := testutil.NewTestServerAndClient()
    47  	if err != nil {
    48  		t.Fatal(err)
    49  	}
    50  	defer server.Close()
    51  
    52  	server.Mux.HandleFunc("/v2/apps/foo/perms/", func(w http.ResponseWriter, _ *http.Request) {
    53  		testutil.SetHeaders(w)
    54  
    55  		fmt.Fprintf(w, `{
    56    "users": [
    57      "baz"
    58    ]
    59  }`)
    60  	})
    61  
    62  	var b bytes.Buffer
    63  	cmdr := DryccCmd{WOut: &b, ConfigFile: cf}
    64  
    65  	err = cmdr.PermsList("foo", false, 1)
    66  	assert.NoError(t, err)
    67  
    68  	assert.Equal(t, testutil.StripProgress(b.String()), `USERNAME    ADMIN 
    69  baz         false    
    70  `, "output")
    71  }
    72  
    73  func TestPermsListAdmins(t *testing.T) {
    74  	t.Parallel()
    75  	cf, server, err := testutil.NewTestServerAndClient()
    76  	if err != nil {
    77  		t.Fatal(err)
    78  	}
    79  	defer server.Close()
    80  
    81  	server.Mux.HandleFunc("/v2/admin/perms/", func(w http.ResponseWriter, _ *http.Request) {
    82  		testutil.SetHeaders(w)
    83  
    84  		fmt.Fprintf(w, `{
    85    "count": 2,
    86    "next": null,
    87    "previous": null,
    88    "results": [
    89      {
    90        "username": "fred",
    91        "is_superuser": true
    92      },
    93      {
    94        "username": "bob",
    95        "is_superuser": true
    96      }
    97  ]
    98  }`)
    99  	})
   100  
   101  	var b bytes.Buffer
   102  	cmdr := DryccCmd{WOut: &b, ConfigFile: cf}
   103  
   104  	err = cmdr.PermsList("foo", true, -1)
   105  	assert.NoError(t, err)
   106  
   107  	assert.Equal(t, testutil.StripProgress(b.String()), `USERNAME    ADMIN 
   108  fred        true     
   109  bob         true     
   110  `, "output")
   111  }
   112  
   113  func TestPermsListAdminsLimit(t *testing.T) {
   114  	t.Parallel()
   115  	cf, server, err := testutil.NewTestServerAndClient()
   116  	if err != nil {
   117  		t.Fatal(err)
   118  	}
   119  	defer server.Close()
   120  
   121  	server.Mux.HandleFunc("/v2/admin/perms/", func(w http.ResponseWriter, _ *http.Request) {
   122  		testutil.SetHeaders(w)
   123  
   124  		fmt.Fprintf(w, `{
   125    "count": 2,
   126    "next": null,
   127    "previous": null,
   128    "results": [
   129      {
   130        "username": "fred",
   131        "is_superuser": true
   132      }
   133    ]
   134  }`)
   135  	})
   136  
   137  	var b bytes.Buffer
   138  	cmdr := DryccCmd{WOut: &b, ConfigFile: cf}
   139  
   140  	err = cmdr.PermsList("foo", true, 1)
   141  	assert.NoError(t, err)
   142  
   143  	assert.Equal(t, testutil.StripProgress(b.String()), `USERNAME    ADMIN 
   144  fred        true     
   145  `, "output")
   146  }
   147  
   148  func TestPermsCreateUser(t *testing.T) {
   149  	t.Parallel()
   150  	cf, server, err := testutil.NewTestServerAndClient()
   151  	if err != nil {
   152  		t.Fatal(err)
   153  	}
   154  	defer server.Close()
   155  	var b bytes.Buffer
   156  	cmdr := DryccCmd{WOut: &b, ConfigFile: cf}
   157  
   158  	server.Mux.HandleFunc("/v2/apps/lorem-ipsum/", func(w http.ResponseWriter, _ *http.Request) {
   159  		testutil.SetHeaders(w)
   160  		fmt.Fprintf(w, `{
   161    "uuid": "c4aed81c-d1ca-4ff1-ab89-d2151264e1a3",
   162    "id": "lorem-ipsum",
   163    "owner": "dolar-sit-amet",
   164    "structure": {
   165      "cmd": 1
   166    },
   167    "created": "2016-08-22T17:40:16Z",
   168    "updated": "2016-08-22T17:40:16Z"
   169  }`)
   170  	})
   171  
   172  	server.Mux.HandleFunc("/v2/apps/lorem-ipsum/perms", func(w http.ResponseWriter, _ *http.Request) {
   173  		testutil.SetHeaders(w)
   174  	})
   175  
   176  	err = cmdr.PermCreate("lorem-ipsum", "test-user", false)
   177  	assert.NoError(t, err)
   178  	assert.Equal(t, testutil.StripProgress(b.String()), `Adding test-user to lorem-ipsum collaborators... done
   179  `, "output")
   180  }
   181  
   182  func TestPermsCreateAdmin(t *testing.T) {
   183  	t.Parallel()
   184  	cf, server, err := testutil.NewTestServerAndClient()
   185  	if err != nil {
   186  		t.Fatal(err)
   187  	}
   188  	defer server.Close()
   189  	var b bytes.Buffer
   190  	cmdr := DryccCmd{WOut: &b, ConfigFile: cf}
   191  
   192  	server.Mux.HandleFunc("/v2/admin/perms/", func(w http.ResponseWriter, _ *http.Request) {
   193  		testutil.SetHeaders(w)
   194  	})
   195  
   196  	err = cmdr.PermCreate("lorem-ipsum", "test-admin", true)
   197  	assert.NoError(t, err)
   198  	assert.Equal(t, testutil.StripProgress(b.String()), `Adding test-admin to system administrators... done
   199  `, "output")
   200  }
   201  
   202  func TestPermsDeleteUser(t *testing.T) {
   203  	t.Parallel()
   204  	cf, server, err := testutil.NewTestServerAndClient()
   205  	if err != nil {
   206  		t.Fatal(err)
   207  	}
   208  	defer server.Close()
   209  	var b bytes.Buffer
   210  	cmdr := DryccCmd{WOut: &b, ConfigFile: cf}
   211  
   212  	server.Mux.HandleFunc("/v2/apps/lorem-ipsum/", func(w http.ResponseWriter, _ *http.Request) {
   213  		testutil.SetHeaders(w)
   214  		fmt.Fprintf(w, `{
   215    "uuid": "c4aed81c-d1ca-4ff1-ab89-d2151264e1a3",
   216    "id": "lorem-ipsum",
   217    "owner": "dolar-sit-amet",
   218    "structure": {
   219      "cmd": 1
   220    },
   221    "created": "2016-08-22T17:40:16Z",
   222    "updated": "2016-08-22T17:40:16Z"
   223  }`)
   224  	})
   225  
   226  	server.Mux.HandleFunc("/v2/apps/lorem-ipsum/perms", func(w http.ResponseWriter, _ *http.Request) {
   227  		testutil.SetHeaders(w)
   228  	})
   229  
   230  	err = cmdr.PermDelete("lorem-ipsum", "test-user", false)
   231  	assert.NoError(t, err)
   232  	assert.Equal(t, testutil.StripProgress(b.String()), `Removing test-user from lorem-ipsum collaborators... done
   233  `, "output")
   234  }
   235  
   236  func TestPermsDeleteAdmin(t *testing.T) {
   237  	t.Parallel()
   238  	cf, server, err := testutil.NewTestServerAndClient()
   239  	if err != nil {
   240  		t.Fatal(err)
   241  	}
   242  	defer server.Close()
   243  	var b bytes.Buffer
   244  	cmdr := DryccCmd{WOut: &b, ConfigFile: cf}
   245  
   246  	server.Mux.HandleFunc("/v2/admin/perms/", func(w http.ResponseWriter, _ *http.Request) {
   247  		testutil.SetHeaders(w)
   248  	})
   249  
   250  	err = cmdr.PermDelete("lorem-ipsum", "test-admin", true)
   251  	assert.NoError(t, err)
   252  	assert.Equal(t, testutil.StripProgress(b.String()), `Removing test-admin from system administrators... done
   253  `, "output")
   254  }