ducky/devices
ducky/devices/storer_test.go
Fix happy path test for getting devices. We forgot to create the Devices in the Storer tests, so our GetDevices happy path test was invalid. Add the call, and we're ok.
| paddy@2 | 1 package devices |
| paddy@2 | 2 |
| paddy@2 | 3 import ( |
| paddy@2 | 4 "testing" |
| paddy@2 | 5 "time" |
| paddy@2 | 6 |
| paddy@2 | 7 "code.secondbit.org/uuid.hg" |
| paddy@2 | 8 "golang.org/x/net/context" |
| paddy@2 | 9 ) |
| paddy@2 | 10 |
| paddy@2 | 11 var storers []Storer |
| paddy@2 | 12 |
| paddy@2 | 13 func compareDevices(device1, device2 Device) (ok bool, field string, expected, result interface{}) { |
| paddy@2 | 14 if !device1.ID.Equal(device2.ID) { |
| paddy@2 | 15 return false, "ID", device1.ID, device2.ID |
| paddy@2 | 16 } |
| paddy@2 | 17 if device1.Name != device2.Name { |
| paddy@2 | 18 return false, "Name", device1.Name, device2.Name |
| paddy@2 | 19 } |
| paddy@2 | 20 if !device1.Owner.Equal(device2.Owner) { |
| paddy@2 | 21 return false, "Owner", device1.Owner, device2.Owner |
| paddy@2 | 22 } |
| paddy@2 | 23 if device1.Type != device2.Type { |
| paddy@2 | 24 return false, "Type", device1.Type, device2.Type |
| paddy@2 | 25 } |
| paddy@2 | 26 if !device1.Created.Equal(device2.Created) { |
| paddy@2 | 27 return false, "Created", device1.Created, device2.Created |
| paddy@2 | 28 } |
| paddy@2 | 29 if !device1.LastSeen.Equal(device2.LastSeen) { |
| paddy@2 | 30 return false, "LastSeen", device1.LastSeen, device2.LastSeen |
| paddy@2 | 31 } |
| paddy@2 | 32 if device1.PushToken != device2.PushToken { |
| paddy@2 | 33 return false, "PushToken", device1.PushToken, device2.PushToken |
| paddy@2 | 34 } |
| paddy@2 | 35 return true, "", nil, nil |
| paddy@2 | 36 } |
| paddy@2 | 37 |
| paddy@2 | 38 func TestGetDevicesHappyPath(t *testing.T) { |
| paddy@2 | 39 for _, storer := range storers { |
| paddy@2 | 40 storer, err := storer.Factory(context.TODO()) |
| paddy@2 | 41 if err != nil { |
| paddy@2 | 42 t.Fatalf("Fatal error creating %T: %+v\n", storer, err) |
| paddy@2 | 43 } |
| paddy@2 | 44 |
| paddy@2 | 45 devices := []Device{ |
| paddy@2 | 46 {ID: uuid.NewID(), Name: "Test 1", Owner: uuid.NewID(), Type: TypeAndroidPhone, Created: time.Now(), LastSeen: time.Now(), PushToken: "test token"}, |
| paddy@2 | 47 {ID: uuid.NewID(), Name: "Test 2", Owner: uuid.NewID(), Type: TypeAndroidTablet, Created: time.Now(), LastSeen: time.Now(), PushToken: "test token"}, |
| paddy@2 | 48 {ID: uuid.NewID(), Name: "Test 3", Owner: uuid.NewID(), Type: TypeChromeExtension, Created: time.Now(), LastSeen: time.Now(), PushToken: "test token"}, |
| paddy@2 | 49 } |
| paddy@3 | 50 |
| paddy@3 | 51 err = storer.CreateDevices(devices, context.TODO()) |
| paddy@3 | 52 if err != nil { |
| paddy@3 | 53 t.Errorf("Error creating devices in %T: %+v\n", err) |
| paddy@3 | 54 } |
| paddy@3 | 55 |
| paddy@2 | 56 ids := make([]uuid.ID, 0, len(devices)) |
| paddy@2 | 57 for _, device := range devices { |
| paddy@2 | 58 ids = append(ids, device.ID) |
| paddy@2 | 59 } |
| paddy@2 | 60 |
| paddy@2 | 61 results, err := storer.GetDevices(ids, context.TODO()) |
| paddy@2 | 62 if err != nil { |
| paddy@2 | 63 t.Errorf("Unexpected error retrieving devices from %T: %+v\n", storer, err) |
| paddy@2 | 64 } |
| paddy@2 | 65 for _, device := range devices { |
| paddy@2 | 66 d, returned := results[device.ID.String()] |
| paddy@2 | 67 if !returned { |
| paddy@2 | 68 t.Errorf("Expected device %s to be in results from %T, but wasn't present\n", device.Name, storer) |
| paddy@2 | 69 } |
| paddy@2 | 70 ok, field, expected, result := compareDevices(device, d) |
| paddy@2 | 71 if !ok { |
| paddy@2 | 72 t.Errorf("Expected %s of %s to be %v, got %v from %T\n", field, device.Name, expected, result, storer) |
| paddy@2 | 73 } |
| paddy@2 | 74 } |
| paddy@2 | 75 err = storer.Destroy(context.TODO()) |
| paddy@2 | 76 if err != nil { |
| paddy@2 | 77 t.Errorf("Error cleaning up after %T: %+v\n", storer, err) |
| paddy@2 | 78 } |
| paddy@2 | 79 } |
| paddy@2 | 80 } |