55 "strings"
66 "testing"
77
8+ "github.com/dropbox/dropbox-sdk-go-unofficial/v6/dropbox"
89 "github.com/dropbox/dropbox-sdk-go-unofficial/v6/dropbox/files"
10+ "github.com/spf13/cobra"
911)
1012
1113func TestSearchArgValidation (t * testing.T ) {
@@ -23,17 +25,17 @@ func TestSearchPathScopeValidation(t *testing.T) {
2325}
2426
2527func TestRenderSearchResultsSeparatesMatchesWithNewlines (t * testing.T ) {
26- res := files . NewSearchResult ([] * files.SearchMatch {
27- files . NewSearchMatch ( nil , & files.FileMetadata {
28+ entries := [] files.IsMetadata {
29+ & files.FileMetadata {
2830 Metadata : files.Metadata {PathDisplay : "/first.txt" },
29- }) ,
30- files . NewSearchMatch ( nil , & files.FolderMetadata {
31+ },
32+ & files.FolderMetadata {
3133 Metadata : files.Metadata {PathDisplay : "/second" },
32- }) ,
33- }, false , 0 )
34+ },
35+ }
3436
3537 var out bytes.Buffer
36- if err := renderSearchResults (& out , res , listOptions {long : false }); err != nil {
38+ if err := renderSearchResults (& out , entries , listOptions {long : false }); err != nil {
3739 t .Fatalf ("renderSearchResults returned error: %v" , err )
3840 }
3941
@@ -49,3 +51,96 @@ func TestRenderSearchResultsSeparatesMatchesWithNewlines(t *testing.T) {
4951 t .Errorf ("second rendered match = %q, want %q" , got , want )
5052 }
5153}
54+
55+ func TestRenderSearchResultsLongModeIncludesHeader (t * testing.T ) {
56+ entries := []files.IsMetadata {
57+ & files.FileMetadata {
58+ Metadata : files.Metadata {PathDisplay : "/first.txt" },
59+ Rev : "abc123" ,
60+ Size : 42 ,
61+ },
62+ }
63+
64+ var out bytes.Buffer
65+ if err := renderSearchResults (& out , entries , listOptions {long : true }); err != nil {
66+ t .Fatalf ("renderSearchResults returned error: %v" , err )
67+ }
68+
69+ got := out .String ()
70+ for _ , want := range []string {"Revision" , "Size" , "Last modified" , "Path" , "abc123" , "/first.txt" } {
71+ if ! strings .Contains (got , want ) {
72+ t .Errorf ("output = %q, want to contain %q" , got , want )
73+ }
74+ }
75+ }
76+
77+ func TestSearchUsesSearchV2AndCommandOutput (t * testing.T ) {
78+ cmd , stdout := testSearchCmd ()
79+ var firstArg * files.SearchV2Arg
80+ var continueCursor string
81+
82+ mock := & mockFilesClient {
83+ searchV2Fn : func (arg * files.SearchV2Arg ) (* files.SearchV2Result , error ) {
84+ firstArg = arg
85+ res := files .NewSearchV2Result ([]* files.SearchMatchV2 {
86+ searchMatch (& files.FileMetadata {
87+ Metadata : files.Metadata {PathDisplay : "/docs/first.txt" },
88+ }),
89+ }, true )
90+ res .Cursor = "cursor-1"
91+ return res , nil
92+ },
93+ searchContinueV2Fn : func (arg * files.SearchV2ContinueArg ) (* files.SearchV2Result , error ) {
94+ continueCursor = arg .Cursor
95+ return files .NewSearchV2Result ([]* files.SearchMatchV2 {
96+ searchMatch (& files.FolderMetadata {
97+ Metadata : files.Metadata {PathDisplay : "/docs/second" },
98+ }),
99+ }, false ), nil
100+ },
101+ }
102+ stubFilesClient (t , mock )
103+
104+ if err := search (cmd , []string {"needle" , "/docs" }); err != nil {
105+ t .Fatalf ("search error: %v" , err )
106+ }
107+
108+ if firstArg == nil {
109+ t .Fatal ("SearchV2 was not called" )
110+ }
111+ if firstArg .Query != "needle" {
112+ t .Errorf ("query = %q, want %q" , firstArg .Query , "needle" )
113+ }
114+ if firstArg .Options == nil || firstArg .Options .Path != "/docs" {
115+ t .Fatalf ("options path = %#v, want /docs" , firstArg .Options )
116+ }
117+ if continueCursor != "cursor-1" {
118+ t .Errorf ("continue cursor = %q, want cursor-1" , continueCursor )
119+ }
120+
121+ got := stdout .String ()
122+ for _ , want := range []string {"/docs/first.txt" , "/docs/second" } {
123+ if ! strings .Contains (got , want ) {
124+ t .Errorf ("stdout = %q, want to contain %q" , got , want )
125+ }
126+ }
127+ }
128+
129+ func testSearchCmd () (* cobra.Command , * bytes.Buffer ) {
130+ var stdout bytes.Buffer
131+ cmd := & cobra.Command {Use : "search" }
132+ cmd .SetOut (& stdout )
133+ cmd .Flags ().BoolP ("long" , "l" , false , "" )
134+ cmd .Flags ().String ("sort" , "" , "" )
135+ cmd .Flags ().BoolP ("reverse" , "r" , false , "" )
136+ cmd .Flags ().String ("time" , "server" , "" )
137+ cmd .Flags ().String ("time-format" , "" , "" )
138+ return cmd , & stdout
139+ }
140+
141+ func searchMatch (metadata files.IsMetadata ) * files.SearchMatchV2 {
142+ return files .NewSearchMatchV2 (& files.MetadataV2 {
143+ Tagged : dropbox.Tagged {Tag : files .MetadataV2Metadata },
144+ Metadata : metadata ,
145+ })
146+ }
0 commit comments