github.com/nats-io/nsc/v2@v2.8.7-0.20240307184528-efd7023c6896/cmd/revoke_listusers_test.go (about)

     1  /*
     2   * Copyright 2018-2020 The NATS Authors
     3   * Licensed under the Apache License, Version 2.0 (the "License");
     4   * you may not use this file except in compliance with the License.
     5   * You may obtain a copy of the License at
     6   *
     7   * http://www.apache.org/licenses/LICENSE-2.0
     8   *
     9   * Unless required by applicable law or agreed to in writing, software
    10   * distributed under the License is distributed on an "AS IS" BASIS,
    11   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12   * See the License for the specific language governing permissions and
    13   * limitations under the License.
    14   */
    15  
    16  package cmd
    17  
    18  import (
    19  	"strings"
    20  	"testing"
    21  	"time"
    22  
    23  	"github.com/nats-io/jwt/v2"
    24  
    25  	"github.com/stretchr/testify/require"
    26  )
    27  
    28  func TestRevokeListUsers(t *testing.T) {
    29  	ts := NewTestStore(t, "revoke_clear_user")
    30  	defer ts.Done(t)
    31  
    32  	ts.AddAccount(t, "A")
    33  	ts.AddUser(t, "A", "one")
    34  	ts.AddUser(t, "A", "two")
    35  	ts.AddUser(t, "A", "three")
    36  
    37  	_, _, err := ExecuteCmd(createRevokeUserCmd(), "--name", "one", "--at", "1001")
    38  	require.NoError(t, err)
    39  
    40  	_, _, err = ExecuteCmd(createRevokeUserCmd(), "--name", "two", "--at", "2001")
    41  	require.NoError(t, err)
    42  
    43  	stdout, _, err := ExecuteCmd(createRevokeListUsersCmd())
    44  	require.NoError(t, err)
    45  
    46  	u, err := ts.Store.ReadUserClaim("A", "one")
    47  	require.NoError(t, err)
    48  	require.True(t, strings.Contains(stdout, u.Subject))
    49  	require.True(t, strings.Contains(stdout, time.Unix(1001, 0).Format(time.RFC1123)))
    50  
    51  	u, err = ts.Store.ReadUserClaim("A", "two")
    52  	require.NoError(t, err)
    53  	require.True(t, strings.Contains(stdout, u.Subject))
    54  	require.True(t, strings.Contains(stdout, time.Unix(2001, 0).Format(time.RFC1123)))
    55  }
    56  
    57  func TestRevokeListUsersNoAccount(t *testing.T) {
    58  	ts := NewTestStore(t, "revoke_clear_user")
    59  	defer ts.Done(t)
    60  	_, _, err := ExecuteInteractiveCmd(createRevokeListUsersCmd(), []interface{}{})
    61  	require.Error(t, err)
    62  	require.Contains(t, err.Error(), "no accounts defined")
    63  }
    64  
    65  func TestRevokeListUsersNoRevocations(t *testing.T) {
    66  	ts := NewTestStore(t, "revoke_clear_user")
    67  	defer ts.Done(t)
    68  	ts.AddAccount(t, "A")
    69  	_, _, err := ExecuteCmd(createRevokeListUsersCmd())
    70  	require.Error(t, err)
    71  	require.Contains(t, err.Error(), "does not have revoked users")
    72  }
    73  
    74  func TestRevokeListUsersAllUsers(t *testing.T) {
    75  	ts := NewTestStore(t, "revoke_clear_user")
    76  	defer ts.Done(t)
    77  	ts.AddAccount(t, "A")
    78  	_, _, err := ExecuteCmd(createRevokeUserCmd(), "-u", "*")
    79  	require.NoError(t, err)
    80  
    81  	ac, err := ts.Store.ReadAccountClaim("A")
    82  	require.NoError(t, err)
    83  	require.Contains(t, ac.Revocations, jwt.All)
    84  
    85  	stdout, _, err := ExecuteCmd(createRevokeListUsersCmd())
    86  	require.NoError(t, err)
    87  	require.Contains(t, stdout, "* [All Users]")
    88  }