103 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
		
		
			
		
	
	
			103 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
| 
								 | 
							
								package forms_test
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import (
							 | 
						||
| 
								 | 
							
									"strings"
							 | 
						||
| 
								 | 
							
									"testing"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									validation "github.com/go-ozzo/ozzo-validation/v4"
							 | 
						||
| 
								 | 
							
									"github.com/pocketbase/pocketbase/forms"
							 | 
						||
| 
								 | 
							
									"github.com/pocketbase/pocketbase/tests"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func TestBackupCreateValidateAndSubmit(t *testing.T) {
							 | 
						||
| 
								 | 
							
									scenarios := []struct {
							 | 
						||
| 
								 | 
							
										name           string
							 | 
						||
| 
								 | 
							
										backupName     string
							 | 
						||
| 
								 | 
							
										expectedErrors []string
							 | 
						||
| 
								 | 
							
									}{
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											"invalid length",
							 | 
						||
| 
								 | 
							
											strings.Repeat("a", 97) + ".zip",
							 | 
						||
| 
								 | 
							
											[]string{"name"},
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											"valid length + invalid format",
							 | 
						||
| 
								 | 
							
											strings.Repeat("a", 96),
							 | 
						||
| 
								 | 
							
											[]string{"name"},
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											"valid length + valid format",
							 | 
						||
| 
								 | 
							
											strings.Repeat("a", 96) + ".zip",
							 | 
						||
| 
								 | 
							
											[]string{},
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											"auto generated name",
							 | 
						||
| 
								 | 
							
											"",
							 | 
						||
| 
								 | 
							
											[]string{},
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									for _, s := range scenarios {
							 | 
						||
| 
								 | 
							
										func() {
							 | 
						||
| 
								 | 
							
											app, _ := tests.NewTestApp()
							 | 
						||
| 
								 | 
							
											defer app.Cleanup()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											fsys, err := app.NewBackupsFilesystem()
							 | 
						||
| 
								 | 
							
											if err != nil {
							 | 
						||
| 
								 | 
							
												t.Fatal(err)
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
											defer fsys.Close()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											form := forms.NewBackupCreate(app)
							 | 
						||
| 
								 | 
							
											form.Name = s.backupName
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											result := form.Submit()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											// parse errors
							 | 
						||
| 
								 | 
							
											errs, ok := result.(validation.Errors)
							 | 
						||
| 
								 | 
							
											if !ok && result != nil {
							 | 
						||
| 
								 | 
							
												t.Errorf("[%s] Failed to parse errors %v", s.name, result)
							 | 
						||
| 
								 | 
							
												return
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											// check errors
							 | 
						||
| 
								 | 
							
											if len(errs) > len(s.expectedErrors) {
							 | 
						||
| 
								 | 
							
												t.Errorf("[%s] Expected error keys %v, got %v", s.name, s.expectedErrors, errs)
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
											for _, k := range s.expectedErrors {
							 | 
						||
| 
								 | 
							
												if _, ok := errs[k]; !ok {
							 | 
						||
| 
								 | 
							
													t.Errorf("[%s] Missing expected error key %q in %v", s.name, k, errs)
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											// retrieve all created backup files
							 | 
						||
| 
								 | 
							
											files, err := fsys.List("")
							 | 
						||
| 
								 | 
							
											if err != nil {
							 | 
						||
| 
								 | 
							
												t.Errorf("[%s] Failed to retrieve backup files", s.name)
							 | 
						||
| 
								 | 
							
												return
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											if result != nil {
							 | 
						||
| 
								 | 
							
												if total := len(files); total != 0 {
							 | 
						||
| 
								 | 
							
													t.Errorf("[%s] Didn't expected backup files, found %d", s.name, total)
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
												return
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											if total := len(files); total != 1 {
							 | 
						||
| 
								 | 
							
												t.Errorf("[%s] Expected 1 backup file, got %d", s.name, total)
							 | 
						||
| 
								 | 
							
												return
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											if s.backupName == "" {
							 | 
						||
| 
								 | 
							
												prefix := "pb_backup_"
							 | 
						||
| 
								 | 
							
												if !strings.HasPrefix(files[0].Key, prefix) {
							 | 
						||
| 
								 | 
							
													t.Errorf("[%s] Expected the backup file, to have prefix %q: %q", s.name, prefix, files[0].Key)
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											} else if s.backupName != files[0].Key {
							 | 
						||
| 
								 | 
							
												t.Errorf("[%s] Expected backup file %q, got %q", s.name, s.backupName, files[0].Key)
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										}()
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |