github.com/aeternity/aepp-sdk-go/v6@v6.0.0/cmd/contract_test.go (about) 1 package cmd 2 3 import ( 4 "os" 5 "testing" 6 7 "github.com/aeternity/aepp-sdk-go/v6/naet" 8 ) 9 10 func Test_compileFunc(t *testing.T) { 11 type args struct { 12 conn naet.CompileContracter 13 source string 14 } 15 tests := []struct { 16 name string 17 args args 18 wantErr bool 19 online bool 20 }{ 21 { 22 name: "Simple storage, mocked compiler", 23 args: args{ 24 conn: &mockCompileContracter{}, 25 source: contractSimpleStorage, 26 }, 27 wantErr: false, 28 online: false, 29 }, 30 { 31 name: "Simple storage, online compiler: should compile", 32 args: args{ 33 conn: newCompiler(), 34 source: contractSimpleStorage, 35 }, 36 wantErr: false, 37 online: true, 38 }, 39 { 40 name: "Simple storage with syntax error, online compiler: shouldn't compile", 41 args: args{ 42 conn: newCompiler(), 43 source: contractSimpleStorageErr, 44 }, 45 wantErr: true, 46 online: true, 47 }, 48 } 49 for _, tt := range tests { 50 if !online && tt.online { 51 t.Skip("Skipping online test") 52 } 53 tempdir, path := writeTestContractFile(t, tt.args.source) 54 defer os.RemoveAll(tempdir) 55 56 t.Run(tt.name, func(t *testing.T) { 57 if err := compileFunc(tt.args.conn, []string{path}); (err != nil) != tt.wantErr { 58 t.Errorf("compileFunc() error = %v, wantErr %v", err, tt.wantErr) 59 } 60 }) 61 } 62 } 63 64 func Test_encodeCalldataFunc(t *testing.T) { 65 type args struct { 66 conn naet.EncodeCalldataer 67 args []string 68 source string 69 } 70 tests := []struct { 71 name string 72 args args 73 wantErr bool 74 online bool 75 }{ 76 { 77 name: "1 function argument", 78 args: args{ 79 conn: &mockEncodeCalldataer{}, 80 args: []string{"init", "42"}, 81 source: contractSimpleStorage, 82 }, 83 wantErr: false, 84 online: false, 85 }, 86 { 87 name: "1 function argument (online)", 88 args: args{ 89 conn: newCompiler(), 90 args: []string{"init", "42"}, 91 source: contractSimpleStorage, 92 }, 93 wantErr: false, 94 online: true, 95 }, 96 } 97 for _, tt := range tests { 98 if !online && tt.online { 99 t.Skip("Skipping online test") 100 } 101 tempdir, path := writeTestContractFile(t, tt.args.source) 102 defer os.RemoveAll(tempdir) 103 104 t.Run(tt.name, func(t *testing.T) { 105 a := append([]string{path}, tt.args.args...) 106 if err := encodeCalldataFunc(tt.args.conn, a); (err != nil) != tt.wantErr { 107 t.Errorf("encodeCalldataFunc() error = %v, wantErr %v", err, tt.wantErr) 108 } 109 }) 110 } 111 } 112 113 func Test_decodeCalldataBytecodeFunc(t *testing.T) { 114 type args struct { 115 conn decodeCalldataer 116 args []string 117 } 118 tests := []struct { 119 name string 120 args args 121 wantErr bool 122 online bool 123 }{ 124 { 125 name: "Decode with bytecode", 126 args: args{ 127 conn: &mockdecodeCalldataer{decodedCalldata: `{"arguments":[{"type":"init","value":42}],"function":"init"}`}, 128 args: []string{contractSimpleStorageBytecode, contractSimpleStorageInit42}, 129 }, 130 wantErr: false, 131 online: false, 132 }, 133 { 134 name: "Decode with bytecode (online)", 135 args: args{ 136 conn: newCompiler(), 137 args: []string{contractSimpleStorageBytecode, contractSimpleStorageInit42}, 138 }, 139 wantErr: false, 140 online: true, 141 }, 142 } 143 144 for _, tt := range tests { 145 if !online && tt.online { 146 t.Skip("Skipping online test") 147 } 148 t.Run(tt.name, func(t *testing.T) { 149 if err := decodeCalldataBytecodeFunc(tt.args.conn, tt.args.args); (err != nil) != tt.wantErr { 150 t.Errorf("decodeCalldataFunc() error = %v, wantErr %v", err, tt.wantErr) 151 } 152 }) 153 } 154 } 155 func Test_decodeCalldataSourceFunc(t *testing.T) { 156 type args struct { 157 conn decodeCalldataer 158 args []string 159 } 160 // Write source file for Decode with source file test 161 tempdir, path := writeTestContractFile(t, contractSimpleStorage) 162 defer os.RemoveAll(tempdir) 163 164 tests := []struct { 165 name string 166 args args 167 wantErr bool 168 online bool 169 }{ 170 { 171 name: "Decode with source file", 172 args: args{ 173 conn: &mockdecodeCalldataer{decodedCalldata: `{"arguments":[{"type":"int","value":42}],"function":"init"}`}, 174 args: []string{path, "init", contractSimpleStorageInit42}, 175 }, 176 wantErr: false, 177 online: false, 178 }, 179 { 180 name: "Decode with source file (online)", 181 args: args{ 182 conn: newCompiler(), 183 args: []string{path, "init", contractSimpleStorageInit42}, 184 }, 185 wantErr: false, 186 online: true, 187 }, 188 } 189 190 for _, tt := range tests { 191 if !online && tt.online { 192 t.Skip("Skipping online test") 193 } 194 t.Run(tt.name, func(t *testing.T) { 195 if err := decodeCalldataSourceFunc(tt.args.conn, tt.args.args); (err != nil) != tt.wantErr { 196 t.Errorf("decodeCalldataFunc() error = %v, wantErr %v", err, tt.wantErr) 197 } 198 }) 199 } 200 } 201 func Test_generateAciFunc(t *testing.T) { 202 // Write source file for Decode with source file test 203 tempdir, path := writeTestContractFile(t, contractSimpleStorage) 204 defer os.RemoveAll(tempdir) 205 type args struct { 206 conn naet.GenerateACIer 207 args []string 208 } 209 tests := []struct { 210 name string 211 args args 212 wantErr bool 213 }{ 214 { 215 name: "Generate ACI from SimpleStorage", 216 args: args{ 217 conn: &mockGenerateACIer{ 218 aci: `{"encoded_aci":{"contract":{"functions":[{"arguments":[{"name":"value","type":"int"}],"name":"init","returns":"SimpleStorage.state","stateful":false}],"name":"SimpleStorage","state":{"record":[{"name":"data","type":"int"}]},"type_defs":[]}},"interface":"contract SimpleStorage =\n record state = {data : int}\n entrypoint init : (int) =\u003e SimpleStorage.state\n"}`, 219 }, 220 args: []string{path}, 221 }, 222 wantErr: false, 223 }, 224 } 225 for _, tt := range tests { 226 t.Run(tt.name, func(t *testing.T) { 227 if err := generateAciFunc(tt.args.conn, tt.args.args); (err != nil) != tt.wantErr { 228 t.Errorf("generateAciFunc() error = %v, wantErr %v", err, tt.wantErr) 229 } 230 }) 231 } 232 }