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  }