package drive import ( "encoding/json" "testing" "google.golang.org/api/drive/v3" "github.com/pkg/errors" "github.com/stretchr/testify/assert" ) const exampleExportFormats = `{ "application/vnd.google-apps.document": [ "application/rtf", "application/vnd.oasis.opendocument.text", "text/html", "application/pdf", "application/epub+zip", "application/zip", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "text/plain" ], "application/vnd.google-apps.spreadsheet": [ "application/x-vnd.oasis.opendocument.spreadsheet", "text/tab-separated-values", "application/pdf", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "text/csv", "application/zip", "application/vnd.oasis.opendocument.spreadsheet" ], "application/vnd.google-apps.jam": [ "application/pdf" ], "application/vnd.google-apps.script": [ "application/vnd.google-apps.script+json" ], "application/vnd.google-apps.presentation": [ "application/vnd.oasis.opendocument.presentation", "application/pdf", "application/vnd.openxmlformats-officedocument.presentationml.presentation", "text/plain" ], "application/vnd.google-apps.form": [ "application/zip" ], "application/vnd.google-apps.drawing": [ "image/svg+xml", "image/png", "application/pdf", "image/jpeg" ] }` // Load the example export formats into exportFormats for testing func TestInternalLoadExampleExportFormats(t *testing.T) { exportFormatsOnce.Do(func() {}) assert.NoError(t, json.Unmarshal([]byte(exampleExportFormats), &_exportFormats)) } func TestInternalParseExtensions(t *testing.T) { for _, test := range []struct { in string want []string wantErr error }{ {"doc", []string{"doc"}, nil}, {" docx ,XLSX, pptx,svg", []string{"docx", "xlsx", "pptx", "svg"}, nil}, {"docx,svg,Docx", []string{"docx", "svg"}, nil}, {"docx,potato,docx", []string{"docx"}, errors.New(`couldn't find mime type for extension "potato"`)}, } { f := new(Fs) gotErr := f.parseExtensions(test.in) if test.wantErr == nil { assert.NoError(t, gotErr) } else { assert.EqualError(t, gotErr, test.wantErr.Error()) } assert.Equal(t, test.want, f.extensions) } // Test it is appending f := new(Fs) assert.Nil(t, f.parseExtensions("docx,svg")) assert.Nil(t, f.parseExtensions("docx,svg,xlsx")) assert.Equal(t, []string{"docx", "svg", "xlsx"}, f.extensions) } func TestInternalFindExportFormat(t *testing.T) { item := &drive.File{ Name: "file", MimeType: "application/vnd.google-apps.document", } for _, test := range []struct { extensions []string wantExtension string wantMimeType string }{ {[]string{}, "", ""}, {[]string{"pdf"}, "pdf", "application/pdf"}, {[]string{"pdf", "rtf", "xls"}, "pdf", "application/pdf"}, {[]string{"xls", "rtf", "pdf"}, "rtf", "application/rtf"}, {[]string{"xls", "csv", "svg"}, "", ""}, } { f := new(Fs) f.extensions = test.extensions gotExtension, gotFilename, gotMimeType, gotIsDocument := f.findExportFormat(item) assert.Equal(t, test.wantExtension, gotExtension) if test.wantExtension != "" { assert.Equal(t, item.Name+"."+gotExtension, gotFilename) } else { assert.Equal(t, "", gotFilename) } assert.Equal(t, test.wantMimeType, gotMimeType) assert.Equal(t, true, gotIsDocument) } }