Browse Source

Added ListDevices

Piotr Czajkowski 3 years ago
parent
commit
a2cec82518
3 changed files with 78 additions and 0 deletions
  1. 24 0
      bullet.go
  2. 39 0
      bullet_test.go
  3. 15 0
      devices.go

+ 24 - 0
bullet.go

@@ -183,3 +183,27 @@ func (b Bullet) SendFile(title, text, file string) error {
 	err := b.send(uploadResult)
 	return err
 }
+
+func (b Bullet) ListDevices() (*Devices, error) {
+	request, err := http.NewRequest(http.MethodGet, b.baseURL+"/devices", nil)
+	if err != nil {
+		return nil, err
+	}
+
+	request.Header.Add("Access-Token", b.token)
+
+	response, errResponse := doRequest(request)
+	if errResponse != nil {
+		return nil, errResponse
+	}
+	defer response.Body.Close()
+
+	var result Devices
+	decoder := json.NewDecoder(response.Body)
+	errJSON := decoder.Decode(&result)
+	if errJSON != nil {
+		return nil, errJSON
+	}
+
+	return &result, nil
+}

+ 39 - 0
bullet_test.go

@@ -130,3 +130,42 @@ func TestSendFileFail(t *testing.T) {
 		t.Error(err)
 	}
 }
+
+func TestListDevices(t *testing.T) {
+	devicesJSON := `{
+  "devices": [
+    {
+      "active": true,
+      "app_version": 8623,
+      "created": 1412047948.579029,
+      "iden": "ujpah72o0sjAoRtnM0jc",
+      "manufacturer": "Apple",
+      "model": "iPhone 5s (GSM)",
+      "modified": 1412047948.579031,
+      "nickname": "Elon Musk's iPhone",
+      "push_token": "production:f73be0ee7877c8c7fa69b1468cde764f"
+    }
+  ]
+}`
+
+	server := fakeServer(http.StatusOK, devicesJSON)
+	server.Start()
+	defer server.Close()
+
+	b := Bullet{token: "", baseURL: server.URL}
+
+	devices, err := b.ListDevices()
+	if err != nil {
+		t.Error(err)
+	}
+
+	if devices == nil {
+		t.Error("Devices shouldn't be nil!")
+	}
+
+	expectedID := "ujpah72o0sjAoRtnM0jc"
+	deviceID := devices.Items[0].ID
+	if deviceID != expectedID {
+		t.Errorf("Device ID should be %s, but is %s", expectedID, deviceID)
+	}
+}

+ 15 - 0
devices.go

@@ -0,0 +1,15 @@
+package bullet
+
+type Device struct {
+	ID           string `json:"iden"`
+	Active       bool   `json:"active"`
+	Icon         string `json:"icon"`
+	Nickname     string `json:"nickname"`
+	Manufacturer string `json:"manufacturer"`
+	Model        string `json:"model"`
+	AppVersion   int    `json:"app_version"`
+}
+
+type Devices struct {
+	Items []Device `json:"devices"`
+}