feat: add test for wallet
This commit is contained in:
parent
905c175578
commit
b63af478e3
1 changed files with 235 additions and 0 deletions
235
gpm/wallet_test.go
Normal file
235
gpm/wallet_test.go
Normal file
|
@ -0,0 +1,235 @@
|
|||
package gpm
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"io/ioutil"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func generateWalletWithEntries() Wallet {
|
||||
var wallet Wallet
|
||||
|
||||
for i := 0; i < 10; i++ {
|
||||
entry := Entry{ ID: fmt.Sprintf("%d", i), Name: fmt.Sprintf("Entry %d", i), Group: "Good Group" }
|
||||
wallet.AddEntry(entry)
|
||||
}
|
||||
|
||||
return wallet
|
||||
}
|
||||
|
||||
func TestAddBadEntry(t *testing.T) {
|
||||
var entry Entry
|
||||
var wallet Wallet
|
||||
|
||||
err := wallet.AddEntry(entry)
|
||||
if err == nil {
|
||||
t.Error("a bad entry must return an error")
|
||||
}
|
||||
}
|
||||
|
||||
func TestAddEntries(t *testing.T) {
|
||||
var wallet Wallet
|
||||
|
||||
for i := 0; i < 10; i++ {
|
||||
entry := Entry{ ID: fmt.Sprintf("%d", i), Name: fmt.Sprintf("Entry %d", i) }
|
||||
err := wallet.AddEntry(entry)
|
||||
if err != nil {
|
||||
t.Errorf("a good entry mustn't return an error: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
if len(wallet.Entries) != 10 {
|
||||
t.Errorf("must have 10 entries: %d", len(wallet.Entries))
|
||||
}
|
||||
}
|
||||
|
||||
func TestSearchEntryWithBadID(t *testing.T) {
|
||||
wallet := generateWalletWithEntries()
|
||||
entry := wallet.SearchEntryByID("BAD-ID")
|
||||
if entry.ID != "" {
|
||||
t.Errorf("if the entry doesn't exist must return an empty Entry: %s", entry.ID)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSearchEntryWithGoodID(t *testing.T) {
|
||||
wallet := generateWalletWithEntries()
|
||||
entry := wallet.SearchEntryByID("5")
|
||||
if entry.ID != "5" {
|
||||
t.Errorf("the ID entry must be 5: %s", entry.ID)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSearchEntriesByGroup(t *testing.T) {
|
||||
wallet := generateWalletWithEntries()
|
||||
entries := len(wallet.SearchEntry("", "BAD-GROUP"))
|
||||
if entries != 0 {
|
||||
t.Errorf("a search with bad group must return 0 entry: %d", entries)
|
||||
}
|
||||
|
||||
entries = len(wallet.SearchEntry("", "good group"))
|
||||
if entries != 10 {
|
||||
t.Errorf("a search with good group must return 10 entries: %d", entries)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSearchEntriesByPattern(t *testing.T) {
|
||||
wallet := generateWalletWithEntries()
|
||||
entries := len(wallet.SearchEntry("BAD-PATTERN", ""))
|
||||
if entries != 0 {
|
||||
t.Errorf("a search with bad pattern must return 0 entry: %d", entries)
|
||||
}
|
||||
|
||||
entries = len(wallet.SearchEntry("entry", ""))
|
||||
if entries != 10 {
|
||||
t.Errorf("a search with good pattern must return 10 entries: %d", entries)
|
||||
}
|
||||
|
||||
entries = len(wallet.SearchEntry("^entry 5$", ""))
|
||||
if entries != 1 {
|
||||
t.Errorf("a search with specific pattern must return 1 entry: %d", entries)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSearchEntriesByPatternAndGroup(t *testing.T) {
|
||||
wallet := generateWalletWithEntries()
|
||||
entries := len(wallet.SearchEntry("entry", "good group"))
|
||||
if entries != 10 {
|
||||
t.Errorf("a search with good pattern and godd group must return 10 entries: %d", entries)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDeleteNotExistingEntry(t *testing.T) {
|
||||
wallet := generateWalletWithEntries()
|
||||
err := wallet.DeleteEntry("BAD-ID")
|
||||
if err == nil {
|
||||
t.Error("if the entry doesn't exist must return an error")
|
||||
}
|
||||
|
||||
if len(wallet.Entries) != 10 {
|
||||
t.Errorf("must have 10 entries: %d", len(wallet.Entries))
|
||||
}
|
||||
}
|
||||
|
||||
func TestDeleteEntry(t *testing.T) {
|
||||
wallet := generateWalletWithEntries()
|
||||
err := wallet.DeleteEntry("5")
|
||||
if err != nil {
|
||||
t.Errorf("a good entry mustn't return an error: %s", err)
|
||||
}
|
||||
|
||||
if len(wallet.Entries) != 9 {
|
||||
t.Errorf("must have 9 entries: %d", len(wallet.Entries))
|
||||
}
|
||||
|
||||
if wallet.SearchEntryByID("5").ID != "" {
|
||||
t.Error("must return an empty entry for the ID 5")
|
||||
}
|
||||
}
|
||||
|
||||
func TestUpdateNotExistingEntry(t *testing.T) {
|
||||
wallet := generateWalletWithEntries()
|
||||
err := wallet.UpdateEntry(Entry{ID: "BAD-ID"})
|
||||
if err == nil {
|
||||
t.Error("if the entry doesn't exist must return an error")
|
||||
}
|
||||
}
|
||||
|
||||
func TestUpdateEntry(t *testing.T) {
|
||||
wallet := generateWalletWithEntries()
|
||||
err := wallet.UpdateEntry(Entry{ID: "5"})
|
||||
if err == nil {
|
||||
t.Error("if the entry is bad must return an error")
|
||||
}
|
||||
|
||||
err = wallet.UpdateEntry(Entry{ID: "5", Name: "Name 5"})
|
||||
if err != nil {
|
||||
t.Errorf("a good entry mustn't return an error: %s", err)
|
||||
}
|
||||
|
||||
entry := wallet.SearchEntryByID("5")
|
||||
if entry.Name != "Name 5" {
|
||||
t.Errorf("the entry name for the ID 5 must be 'Name 5': %s", entry.Name)
|
||||
}
|
||||
}
|
||||
|
||||
func TestExportAndImport(t *testing.T) {
|
||||
wallet := generateWalletWithEntries()
|
||||
export, err := wallet.Export()
|
||||
if err != nil {
|
||||
t.Errorf("an export mustn't return an error: %s", err)
|
||||
}
|
||||
|
||||
wallet = Wallet{}
|
||||
err = wallet.Import(export)
|
||||
if err != nil {
|
||||
t.Errorf("a good import mustn't return an error: %s", err)
|
||||
}
|
||||
|
||||
entries := len(wallet.Entries)
|
||||
if entries != 10 {
|
||||
t.Errorf("must have 10 entries: %d", entries)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSaveWallet(t *testing.T) {
|
||||
tmpFile, _ := ioutil.TempFile(os.TempDir(), "gpm_test-")
|
||||
defer os.Remove(tmpFile.Name())
|
||||
|
||||
wallet := generateWalletWithEntries()
|
||||
wallet.Path = tmpFile.Name()
|
||||
wallet.Passphrase = "secret"
|
||||
|
||||
err := wallet.Save()
|
||||
if err != nil {
|
||||
t.Errorf("save wallet mustn't return an error: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoadWalletWithGoodPassword(t *testing.T) {
|
||||
var loadWallet Wallet
|
||||
|
||||
tmpFile, _ := ioutil.TempFile(os.TempDir(), "gpm_test-")
|
||||
defer os.Remove(tmpFile.Name())
|
||||
|
||||
wallet := generateWalletWithEntries()
|
||||
wallet.Path = tmpFile.Name()
|
||||
wallet.Passphrase = "secret"
|
||||
wallet.Save()
|
||||
loadWallet.Path = wallet.Path
|
||||
loadWallet.Passphrase = wallet.Passphrase
|
||||
|
||||
err := loadWallet.Load()
|
||||
if err != nil {
|
||||
t.Errorf("load wallet mustn't return an error: %s", err)
|
||||
}
|
||||
|
||||
entries := len(loadWallet.Entries)
|
||||
if entries != 10 {
|
||||
t.Errorf("must have 10 entries: %d", entries)
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoadWalletWithBadPassword(t *testing.T) {
|
||||
var loadWallet Wallet
|
||||
|
||||
tmpFile, _ := ioutil.TempFile(os.TempDir(), "gpm_test-")
|
||||
defer os.Remove(tmpFile.Name())
|
||||
|
||||
wallet := generateWalletWithEntries()
|
||||
wallet.Path = tmpFile.Name()
|
||||
wallet.Passphrase = "secret"
|
||||
wallet.Save()
|
||||
loadWallet.Path = wallet.Path
|
||||
loadWallet.Passphrase = "bad secret"
|
||||
|
||||
err := loadWallet.Load()
|
||||
if err == nil {
|
||||
t.Error("load wallet with bad password must return an error")
|
||||
}
|
||||
|
||||
entries := len(loadWallet.Entries)
|
||||
if entries != 0 {
|
||||
t.Errorf("must have 0 entries: %d", entries)
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue