github.com/qri-io/qri@v0.10.1-0.20220104210721-c771715036cb/cmd/remove_test.go (about) 1 package cmd 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/qri-io/qri/dsref" 8 "github.com/qri-io/qri/errors" 9 "github.com/qri-io/qri/lib" 10 ) 11 12 func TestRemoveComplete(t *testing.T) { 13 run := NewTestRunner(t, "test_peer_remove_complete", "qri_test_remove_complete") 14 defer run.Delete() 15 16 ctx, cancel := context.WithCancel(context.Background()) 17 defer cancel() 18 19 f, err := NewTestFactory(ctx) 20 if err != nil { 21 t.Errorf("error creating new test factory: %s", err) 22 return 23 } 24 25 cases := []struct { 26 args []string 27 err string 28 }{ 29 {[]string{}, ""}, 30 {[]string{"one arg"}, ""}, 31 {[]string{"one arg", "two args"}, ""}, 32 } 33 34 for i, c := range cases { 35 opt := &RemoveOptions{ 36 IOStreams: run.Streams, 37 } 38 39 opt.Complete(f, c.args) 40 41 if c.err != run.ErrStream.String() { 42 t.Errorf("case %d, error mismatch. Expected: '%s', Got: '%s'", i, c.err, run.ErrStream.String()) 43 run.IOReset() 44 continue 45 } 46 47 if opt.inst == nil { 48 t.Errorf("case %d, opt.inst not set.", i) 49 run.IOReset() 50 continue 51 } 52 run.IOReset() 53 } 54 } 55 56 func TestRemoveValidate(t *testing.T) { 57 cases := []struct { 58 args []string 59 err string 60 msg string 61 }{ 62 {[]string{}, lib.ErrBadArgs.Error(), "please specify a dataset path or name you would like to remove from your qri node"}, 63 {[]string{"me/test"}, "", ""}, 64 {[]string{"me/test", "me/test2"}, "", ""}, 65 } 66 for i, c := range cases { 67 opt := &RemoveOptions{ 68 Refs: NewListOfRefSelects(c.args), 69 } 70 71 err := opt.Validate() 72 if (err == nil && c.err != "") || (err != nil && c.err != err.Error()) { 73 t.Errorf("case %d, mismatched error. Expected: %s, Got: %s", i, c.err, err) 74 continue 75 } 76 if libErr, ok := err.(errors.Error); ok { 77 if libErr.Message() != c.msg { 78 t.Errorf("case %d, mismatched user-friendly message. Expected: '%s', Got: '%s'", i, c.msg, libErr.Message()) 79 continue 80 } 81 } else if c.msg != "" { 82 t.Errorf("case %d, mismatched user-friendly message. Expected: '%s', Got: ''", i, c.msg) 83 continue 84 } 85 } 86 } 87 88 func TestRemoveRun(t *testing.T) { 89 run := NewTestRunner(t, "test_peer_dag_info", "qri_test_dag_info") 90 defer run.Delete() 91 92 ctx, cancel := context.WithCancel(context.Background()) 93 defer cancel() 94 95 f, err := NewTestFactory(ctx) 96 if err != nil { 97 t.Errorf("error creating new test factory: %s", err) 98 return 99 } 100 101 cases := []struct { 102 args []string 103 revision int 104 expected string 105 err string 106 msg string 107 }{ 108 {[]string{}, -1, "", `"" is not a valid dataset reference: empty reference`, ""}, 109 {[]string{"me/bad_dataset"}, -1, "", "reference not found", "could not find dataset 'me/bad_dataset'"}, 110 {[]string{"me/movies"}, -1, "removed entire dataset 'peer/movies@7ptazaa3bwxvgmyfwq4pugzuvcdpqddhihir3f6gvdmfvdifzs3q/mem/QmXkLt1xHqtJjjGoT2reGZLBFELsioWkJ24yDjchGpu63W'\n", "", ""}, 111 {[]string{"me/cities", "me/counter"}, -1, "removed entire dataset 'peer/cities@h5vhalefmhkuky5kqqbm22scxtm2bj2b7w2z63hlwiywi6hkbkoa/mem/QmPWCzaxFoxAu5wS8qXkL6tSA7aR2Lpcwykfz1TbhhpuDp'\n", "", ""}, 112 {[]string{"me/movies"}, -1, "", "reference not found", "could not find dataset 'me/movies'"}, 113 } 114 115 for i, c := range cases { 116 inst, err := f.Instance() 117 if err != nil { 118 t.Fatalf("case %d, error creating instance: %s", i, err) 119 } 120 121 opt := &RemoveOptions{ 122 IOStreams: run.Streams, 123 Refs: NewListOfRefSelects(c.args), 124 Revision: &dsref.Rev{Field: "ds", Gen: c.revision}, 125 inst: inst, 126 } 127 128 err = opt.Run() 129 if (err == nil && c.err != "") || (err != nil && c.err != err.Error()) { 130 t.Errorf("case %d, mismatched error. Expected: %q, Got: %q", i, c.err, err) 131 run.IOReset() 132 continue 133 } 134 135 if libErr, ok := err.(errors.Error); ok { 136 if libErr.Message() != c.msg { 137 t.Errorf("case %d, mismatched user-friendly message. Expected: '%s', Got: '%s'", i, c.msg, libErr.Message()) 138 run.IOReset() 139 continue 140 } 141 } else if c.msg != "" { 142 t.Errorf("case %d, mismatched user-friendly message. Expected: '%s', Got: ''", i, c.msg) 143 run.IOReset() 144 continue 145 } 146 147 if c.expected != run.OutStream.String() { 148 t.Errorf("case %d, output mismatch. Expected: '%s', Got: '%s'", i, c.expected, run.OutStream.String()) 149 run.IOReset() 150 continue 151 } 152 run.IOReset() 153 } 154 } 155 156 func testSliceEqual(a, b []string) bool { 157 158 if a == nil && b == nil { 159 return true 160 } 161 162 if a == nil || b == nil { 163 return false 164 } 165 166 if len(a) != len(b) { 167 return false 168 } 169 170 for i := range a { 171 if a[i] != b[i] { 172 return false 173 } 174 } 175 176 return true 177 }