github.com/qri-io/qri@v0.10.1-0.20220104210721-c771715036cb/cmd/stringers_test.go (about)

     1  package cmd
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"github.com/qri-io/dataset"
     8  	"github.com/qri-io/qri/config"
     9  	reporef "github.com/qri-io/qri/repo/ref"
    10  )
    11  
    12  func TestPeerStringer(t *testing.T) {
    13  	setNoColor(false)
    14  	cases := []struct {
    15  		description string
    16  		peer        *config.ProfilePod
    17  		expect      string
    18  	}{
    19  		// Online & multiple NetworkAddrs
    20  		{"Peer Stringer - Online & multiple addresses",
    21  			&config.ProfilePod{
    22  				Peername:     "cassie",
    23  				Online:       true,
    24  				ID:           "Qm...yay",
    25  				NetworkAddrs: []string{"address_1", "address_2", "address_3"},
    26  			}, "\u001b[32;1mcassie\u001b[0m | \u001b[33monline\u001b[0m\nProfile ID: Qm...yay\nAddresses:    address_1\n              address_2\n              address_3\n\n"},
    27  		// online & no NetworkAddrs
    28  		{"Peer Stringer - Online & no addresses",
    29  			&config.ProfilePod{
    30  				Peername: "justin",
    31  				Online:   true,
    32  				ID:       "Qm...woo",
    33  			}, "\u001b[32;1mjustin\u001b[0m | \u001b[33monline\u001b[0m\nProfile ID: Qm...woo\n\n"},
    34  		// Not online & one NetworkAddrs
    35  		{"Peer Stringer - Not Online & one address",
    36  			&config.ProfilePod{
    37  				Peername:     "brandon",
    38  				Online:       true,
    39  				ID:           "Qm...hi",
    40  				NetworkAddrs: []string{"address_1"},
    41  			}, "\u001b[32;1mbrandon\u001b[0m | \u001b[33monline\u001b[0m\nProfile ID: Qm...hi\nAddress:    address_1\n\n"},
    42  		// Not Online
    43  		{"Peer Stringer - Not Online",
    44  			&config.ProfilePod{
    45  				Peername: "ricky",
    46  				Online:   false,
    47  				ID:       "Qm...wee",
    48  			}, "\u001b[32;1mricky\u001b[0m\nProfile ID: Qm...wee\n\n"},
    49  	}
    50  	for _, c := range cases {
    51  		peerStr := peerStringer(*c.peer).String()
    52  
    53  		if c.expect != peerStr {
    54  			t.Errorf("case '%s', expected: '%s', got'%s'", c.description, c.expect, peerStr)
    55  		}
    56  	}
    57  
    58  }
    59  
    60  func TestRefStringer(t *testing.T) {
    61  	setNoColor(false)
    62  	cases := []struct {
    63  		description string
    64  		ref         *reporef.DatasetRef
    65  		expect      string
    66  	}{
    67  		{"RefStringer - all fields, singular",
    68  			&reporef.DatasetRef{
    69  				Name:     "ds_name",
    70  				Peername: "peer",
    71  				Path:     "/network/hash",
    72  				Dataset: &dataset.Dataset{
    73  					Structure: &dataset.Structure{
    74  						Length:   1,
    75  						Entries:  1,
    76  						ErrCount: 1,
    77  					},
    78  					NumVersions: 1,
    79  					Meta: &dataset.Meta{
    80  						Title: "Dataset Title",
    81  					},
    82  				},
    83  			}, "\u001b[32;1mpeer/ds_name\u001b[0m\nDataset Title\n\u001b[2m/network/hash\u001b[0m\n1 B, 1 entry, 1 error, 1 version\n\n",
    84  		},
    85  		{"RefStringer - all fields, plural",
    86  			&reporef.DatasetRef{
    87  				Name:     "ds_name",
    88  				Peername: "peer",
    89  				Path:     "/network/hash",
    90  				Dataset: &dataset.Dataset{
    91  					Structure: &dataset.Structure{
    92  						Length:   10,
    93  						Entries:  10,
    94  						ErrCount: 10,
    95  					},
    96  					NumVersions: 10,
    97  					Meta: &dataset.Meta{
    98  						Title: "Dataset Title",
    99  					},
   100  				},
   101  			}, "\u001b[32;1mpeer/ds_name\u001b[0m\nDataset Title\n\u001b[2m/network/hash\u001b[0m\n10 B, 10 entries, 10 errors, 10 versions\n\n",
   102  		},
   103  		{"RefStringer - only peername & name",
   104  			&reporef.DatasetRef{
   105  				Peername: "peer",
   106  				Name:     "ds_name",
   107  			}, "\u001b[32;1mpeer/ds_name\u001b[0m\n\n",
   108  		},
   109  	}
   110  	for _, c := range cases {
   111  		refStr := refStringer(*c.ref).String()
   112  		if c.expect != refStr {
   113  			t.Errorf("case '%s', expected: '%s', got'%s'", c.description, c.expect, refStr)
   114  		}
   115  	}
   116  }
   117  
   118  func TestLogStringer(t *testing.T) {
   119  	setNoColor(false)
   120  	time := time.Date(2001, 01, 01, 01, 01, 01, 01, time.UTC)
   121  	cases := []struct {
   122  		description string
   123  		log         *reporef.DatasetRef
   124  		expect      string
   125  	}{
   126  		{"LogStringer - all fields",
   127  			&reporef.DatasetRef{
   128  				Peername: "peer",
   129  				Path:     "/network/hash",
   130  				Dataset: &dataset.Dataset{
   131  					Commit: &dataset.Commit{
   132  						Timestamp: time,
   133  						Title:     "commit title",
   134  						Message:   "commit message",
   135  					},
   136  				},
   137  			}, "\u001b[32mpath:   /network/hash\u001b[0m\nAuthor: peer\nDate:   Jan  1 01:01:01\n\n    commit title\n    commit message\n\n",
   138  		},
   139  		{"LogStringer - no message",
   140  			&reporef.DatasetRef{
   141  				Peername: "peer",
   142  				Path:     "/network/hash",
   143  				Dataset: &dataset.Dataset{
   144  					Commit: &dataset.Commit{
   145  						Timestamp: time,
   146  						Title:     "commit title",
   147  					},
   148  				},
   149  			}, "\u001b[32mpath:   /network/hash\u001b[0m\nAuthor: peer\nDate:   Jan  1 01:01:01\n\n    commit title\n\n",
   150  		},
   151  	}
   152  	for _, c := range cases {
   153  		logStr := logStringer(*c.log).String()
   154  		if c.expect != logStr {
   155  			t.Errorf("case '%s', expected: '%s', got'%s'", c.description, c.expect, logStr)
   156  		}
   157  	}
   158  }