databag/net/server/internal/addAccount_test.go

128 lines
3.3 KiB
Go
Raw Normal View History

2022-01-15 08:07:00 +00:00
package databag
import (
"testing"
"net/http/httptest"
"encoding/base64"
"encoding/json"
)
2022-01-17 07:00:08 +00:00
func TestAddAccount(t *testing.T) {
2022-01-15 08:07:00 +00:00
2022-01-15 22:54:49 +00:00
// acquire new token for creating accounts
2022-01-15 08:07:00 +00:00
auth := base64.StdEncoding.EncodeToString([]byte("admin:pass"))
r := httptest.NewRequest("POST", "/admin/accounts", nil)
r.Header.Add("Authorization","Basic " + auth)
w := httptest.NewRecorder()
2022-01-17 05:11:24 +00:00
AddNodeAccount(w, r)
resp := w.Result()
dec := json.NewDecoder(resp.Body)
var token string
dec.Decode(&token)
2022-01-15 08:07:00 +00:00
if resp.StatusCode != 200 {
t.Errorf("failed to create account")
2022-01-16 07:25:43 +00:00
return
2022-01-15 08:07:00 +00:00
}
2022-01-15 22:54:49 +00:00
// validate account token
r = httptest.NewRequest("GET", "/account/token", nil)
r.Header.Add("Authorization","Bearer " + token)
w = httptest.NewRecorder()
2022-01-17 05:11:24 +00:00
GetAccountToken(w, r)
resp = w.Result()
2022-01-15 22:54:49 +00:00
if resp.StatusCode != 200 {
t.Errorf("invalid token value")
2022-01-16 07:25:43 +00:00
return
2022-01-15 22:54:49 +00:00
}
2022-01-17 05:11:24 +00:00
dec = json.NewDecoder(resp.Body)
var tokenType string
dec.Decode(&tokenType)
2022-01-15 22:54:49 +00:00
if tokenType != "create" {
t.Errorf("invalid token type")
2022-01-16 07:25:43 +00:00
return
}
// check if username is available
2022-01-17 05:11:24 +00:00
r = httptest.NewRequest("GET", "/account/claimable?username=user", nil)
2022-01-16 07:25:43 +00:00
r.Header.Add("Authorization","Bearer " + token)
w = httptest.NewRecorder()
2022-01-17 05:11:24 +00:00
GetAccountUsername(w, r)
resp = w.Result()
2022-01-16 07:25:43 +00:00
if resp.StatusCode != 200 {
t.Errorf("invalid token value")
return
}
2022-01-17 05:11:24 +00:00
dec = json.NewDecoder(resp.Body)
var available bool
dec.Decode(&available)
2022-01-16 07:25:43 +00:00
if !available {
t.Errorf("username not available")
return
2022-01-15 22:54:49 +00:00
}
2022-01-17 05:11:24 +00:00
// create account
auth = base64.StdEncoding.EncodeToString([]byte("user:pass"))
r = httptest.NewRequest("GET", "/account/profile", nil)
r.Header.Add("Credentials","Basic " + auth)
r.Header.Add("Authorization","Bearer " + token)
w = httptest.NewRecorder()
AddAccount(w, r)
resp = w.Result()
if resp.StatusCode != 200 {
t.Errorf("invalid token value")
return
}
dec = json.NewDecoder(resp.Body)
var profile Profile
dec.Decode(&profile)
2022-01-17 06:46:55 +00:00
if profile.Handle != "user" {
2022-01-17 05:11:24 +00:00
t.Errorf("invalid profile")
return
}
2022-01-17 06:46:55 +00:00
// acquire new token for creating accounts
auth = base64.StdEncoding.EncodeToString([]byte("admin:pass"))
r = httptest.NewRequest("POST", "/admin/accounts", nil)
r.Header.Add("Authorization","Basic " + auth)
w = httptest.NewRecorder()
AddNodeAccount(w, r)
resp = w.Result()
dec = json.NewDecoder(resp.Body)
dec.Decode(&token)
if resp.StatusCode != 200 {
t.Errorf("failed to create account")
return
}
// check if username is available
r = httptest.NewRequest("GET", "/account/claimable?username=user", nil)
r.Header.Add("Authorization","Bearer " + token)
w = httptest.NewRecorder()
GetAccountUsername(w, r)
resp = w.Result()
if resp.StatusCode != 200 {
t.Errorf("invalid token value")
return
}
dec = json.NewDecoder(resp.Body)
dec.Decode(&available)
if available {
t.Errorf("username duplicate available")
return
}
// create account
auth = base64.StdEncoding.EncodeToString([]byte("user:pass"))
r = httptest.NewRequest("GET", "/account/profile", nil)
r.Header.Add("Credentials","Basic " + auth)
r.Header.Add("Authorization","Bearer " + token)
w = httptest.NewRecorder()
AddAccount(w, r)
resp = w.Result()
if resp.StatusCode == 200 {
t.Errorf("duplicate handle set")
return
}
2022-01-15 08:07:00 +00:00
}