Browse Source

login returns status and error

Piotr Czajkowski 3 years ago
parent
commit
df914d8675
5 changed files with 59 additions and 11 deletions
  1. 8 5
      app.go
  2. 34 3
      app_test.go
  3. 6 1
      search.go
  4. 5 1
      server.go
  5. 6 1
      tm.go

+ 8 - 5
app.go

@@ -2,6 +2,7 @@ package main
 
 import (
 	"encoding/json"
+	"fmt"
 	"io"
 	"io/ioutil"
 	"log"
@@ -49,25 +50,27 @@ func (app Application) checkLanguage(language string) bool {
 	return ok
 }
 
-func (app *Application) login() {
+func (app *Application) login() (bool, error) {
 	credentials, err := ioutil.ReadFile("./secrets.json")
 	if err != nil {
-		log.Fatalf("Error reading credentials: %s", err)
+		return false, fmt.Errorf("Error reading credentials: %s", err)
 	}
 
 	loginURL := app.BaseURL + "auth/login"
 
 	resp, err := postQuery(loginURL, credentials)
 	if err != nil {
-		log.Fatalf("Error logging in: %s", err)
+		return false, fmt.Errorf("Error logging in: %s", err)
 	}
+	defer resp.Body.Close()
+
 	if resp.StatusCode != 200 {
-		log.Fatalf("Error logging in: %s", resp.Status)
+		return false, fmt.Errorf("Error logging in: %s", resp.Status)
 	}
-	defer resp.Body.Close()
 
 	jsonDecoder(resp.Body, &app)
 
 	app.AuthString = "?authToken=" + app.AccessToken
 	log.Println(app.AuthString, resp.Status)
+	return true, nil
 }

+ 34 - 3
app_test.go

@@ -1,10 +1,23 @@
 package main
 
 import (
+	"fmt"
+	"net/http"
+	"net/http/httptest"
 	"strings"
 	"testing"
 )
 
+func fakeServer(statusCode int, data string) *httptest.Server {
+	function := func(w http.ResponseWriter, r *http.Request) {
+		w.Header().Set("Content-Type", "application/json")
+		w.WriteHeader(statusCode)
+		fmt.Fprint(w, data)
+	}
+
+	return httptest.NewServer(http.HandlerFunc(function))
+}
+
 func TestSetBaseURL(t *testing.T) {
 	toTest := []string{"http://test.com:880/test/", "http://test.com:880/test"}
 
@@ -13,7 +26,7 @@ func TestSetBaseURL(t *testing.T) {
 	for _, testCase := range toTest {
 		app.setBaseURL(testCase)
 		if strings.HasSuffix(app.BaseURL, "//") || !strings.HasSuffix(app.BaseURL, "/") {
-			t.Errorf("URL has been malformed: %v", app.BaseURL)
+			t.Errorf("URL has been malformed: %s", app.BaseURL)
 		}
 	}
 }
@@ -27,10 +40,28 @@ func TestLoadLanguages(t *testing.T) {
 
 	fromMap, ok := app.Languages[testLanguageCode]
 	if !ok {
-		t.Fatalf("There's no key '%v'!", testLanguageCode)
+		t.Fatalf("There's no key '%s'!", testLanguageCode)
 	}
 
 	if fromMap != testLanguage {
-		t.Fatalf("Value of key '%v' isn't '%v'", testLanguageCode, testLanguage)
+		t.Fatalf("Value of key '%s' isn't '%s'", testLanguageCode, testLanguage)
+	}
+}
+
+func TestLogin(t *testing.T) {
+	loginResponse := `{
+    "Name": "admin",
+    "Sid": "00000000-0000-0000-0001-000000000001",
+    "AccessToken": "fde0f7ed-d585-48ec-a0a9-397aea195ccd"
+}`
+
+	server := fakeServer(http.StatusOK, loginResponse)
+	defer server.Close()
+
+	var app Application
+	app.setBaseURL(server.URL)
+	status, err := app.login()
+	if !status || err != nil {
+		t.Fatalf("Status: %v, error: %s", status, err)
 	}
 }

+ 6 - 1
search.go

@@ -109,7 +109,12 @@ func (app *Application) Search(TMs []TM, text string) SearchResults {
 
 		if resp.StatusCode == 401 {
 			time.Sleep(app.Delay)
-			app.login()
+
+			status, err := app.login()
+			if !status || err != nil {
+				log.Fatalf("Couldn't log in: %s", err)
+			}
+
 			return app.Search(TMs, text)
 		}
 

+ 5 - 1
server.go

@@ -77,7 +77,11 @@ func main() {
 		log.Fatalln("Can't do anything without URL to API")
 	}
 
-	app.login()
+	status, err := app.login()
+	if !status || err != nil {
+		log.Fatalf("Couldn't log in: %s", err)
+	}
+
 	app.loadLanguages()
 	app.Delay = time.Duration(20 * time.Second)
 

+ 6 - 1
tm.go

@@ -36,7 +36,12 @@ func (app *Application) GetTMs(language string) []TM {
 	defer resp.Body.Close()
 	if resp.StatusCode == 401 {
 		time.Sleep(app.Delay)
-		app.login()
+
+		status, err := app.login()
+		if !status || err != nil {
+			log.Fatalf("Couldn't log in: %s", err)
+		}
+
 		return app.GetTMs(language)
 	}