ducky/devices
ducky/devices/storer_test.go
Implement ListDevicesByOwner. Write a unit test for listing Devices by their Owner property, as per our Storer interface. Basically, if we insert Devices into the datastore, we need to be able to retrieve the Devices that someone owns. Simple enough. This meant that I needed to implement the Memstore version, past the barebones stub, so the tests would continue to pass.
1.1 --- a/storer_test.go Sun Nov 15 03:05:41 2015 -0800 1.2 +++ b/storer_test.go Sun Nov 15 04:40:30 2015 -0800 1.3 @@ -147,3 +147,66 @@ 1.4 } 1.5 } 1.6 } 1.7 + 1.8 +func TestCreateAndListDevicesByOwner(t *testing.T) { 1.9 + for _, storer := range storers { 1.10 + storer, err := storer.Factory(context.TODO()) 1.11 + if err != nil { 1.12 + t.Fatalf("Fatal error creating %T: %+v\n", storer, err) 1.13 + } 1.14 + 1.15 + owner1, owner2 := uuid.NewID(), uuid.NewID() 1.16 + devices := []Device{ 1.17 + {ID: uuid.NewID(), Name: "Test 1", Owner: owner1, Type: TypeAndroidPhone, Created: time.Now(), LastSeen: time.Now(), PushToken: "test token"}, 1.18 + {ID: uuid.NewID(), Name: "Test 2", Owner: owner2, Type: TypeAndroidTablet, Created: time.Now(), LastSeen: time.Now(), PushToken: "test token"}, 1.19 + {ID: uuid.NewID(), Name: "Test 3", Owner: owner1, Type: TypeChromeExtension, Created: time.Now().Add(time.Minute), LastSeen: time.Now(), PushToken: "test token"}, 1.20 + } 1.21 + 1.22 + err = storer.CreateDevices(devices, context.TODO()) 1.23 + if err != nil { 1.24 + t.Errorf("Error creating devices in %T: %+v\n", storer, err) 1.25 + } 1.26 + 1.27 + results, err := storer.ListDevicesByOwner(owner1, context.TODO()) 1.28 + if err != nil { 1.29 + t.Errorf("Error listing devices for owner1 from %T: %+v\n", storer, err) 1.30 + } 1.31 + if len(results) != 2 { 1.32 + t.Errorf("Expected %d results for owner1, got %d from %T\n", 2, len(results), storer) 1.33 + } 1.34 + resultMap := ToMap(results) 1.35 + d, ok := resultMap[devices[0].ID.String()] 1.36 + if !ok { 1.37 + t.Errorf("Expected to get %s in results, got %+v from %T\n", devices[0].Name, results, storer) 1.38 + } 1.39 + ok, field, expected, result := compareDevices(devices[0], d) 1.40 + if !ok { 1.41 + t.Errorf("Expected %s of %s to be %v, got %v from %T\n", field, devices[0].Name, expected, result, storer) 1.42 + } 1.43 + d, ok = resultMap[devices[2].ID.String()] 1.44 + if !ok { 1.45 + t.Errorf("Expected to get %s in results, got %+v from %T\n", devices[2].Name, results, storer) 1.46 + } 1.47 + ok, field, expected, result = compareDevices(devices[2], d) 1.48 + if !ok { 1.49 + t.Errorf("Expected %s of %s to be %v, got %v from %T\n", field, devices[2].Name, expected, result, storer) 1.50 + } 1.51 + 1.52 + results, err = storer.ListDevicesByOwner(owner2, context.TODO()) 1.53 + if err != nil { 1.54 + t.Errorf("Error listing devices for owner2 from %T: %+v\n", storer, err) 1.55 + } 1.56 + if len(results) != 1 { 1.57 + t.Errorf("Expected %d results for owner2, got %d from %T\n", 1, len(results), storer) 1.58 + } 1.59 + ok, field, expected, result = compareDevices(devices[1], results[0]) 1.60 + if !ok { 1.61 + t.Errorf("Expected %s of %s to be %v, got %v from %T\n", field, devices[1].Name, expected, result, storer) 1.62 + } 1.63 + 1.64 + err = storer.Destroy(context.TODO()) 1.65 + if err != nil { 1.66 + t.Errorf("Error cleaning up after %T: %+v\n", storer, err) 1.67 + } 1.68 + } 1.69 +}