Skip to content

Commit afc3466

Browse files
omarsyVillaquiranm
authored andcommitted
feat: add test
1 parent 296d1f5 commit afc3466

File tree

10 files changed

+273
-39
lines changed

10 files changed

+273
-39
lines changed

examples/gno.land/Makefile

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
KEY = MyKey
2+
BASE = teritori
3+
REMOTE = http://127.0.0.1:26657
4+
CHAIN_ID = dev
5+
6+
.PHONY: add_social_feeds_realm add_utf16_pkg add_ujson_pkg add_flags_index_pkg add_dao_interfaces_pkg add_social_feed all
7+
8+
add_agregator_realm:
9+
gnokey maketx addpkg \
10+
-deposit="1ugnot" \
11+
-gas-fee="1ugnot" \
12+
-gas-wanted="50000000" \
13+
-broadcast="true" \
14+
-chainid="${CHAIN_ID}" \
15+
-remote="${REMOTE}" \
16+
-pkgdir="./r/demo/teritori/worx_aggregator" \
17+
-pkgpath="gno.land/r/${BASE}/worx_aggregator" \
18+
${KEY}
19+
20+
add_random_worx_realm:
21+
gnokey maketx addpkg \
22+
-deposit="1ugnot" \
23+
-gas-fee="1ugnot" \
24+
-gas-wanted="50000000" \
25+
-broadcast="true" \
26+
-chainid="${CHAIN_ID}" \
27+
-remote="${REMOTE}" \
28+
-pkgdir="./r/demo/teritori/providers/random_pusher" \
29+
-pkgpath="gno.land/r/${BASE}/providers/random_pusher" \
30+
${KEY}
31+
32+
33+
add_worx_pkg:
34+
gnokey maketx addpkg \
35+
-deposit="1ugnot" \
36+
-gas-fee="1ugnot" \
37+
-gas-wanted="50000000" \
38+
-broadcast="true" \
39+
-chainid="${CHAIN_ID}" \
40+
-remote="${REMOTE}" \
41+
-pkgdir="./p/demo/teritori/worx" \
42+
-pkgpath="gno.land/p/${BASE}/worx" \
43+
${KEY}
44+
45+
46+
register_dataprovider:
47+
gnokey maketx call \
48+
-pkgpath "gno.land/r/${BASE}/worx_aggregator" \
49+
-func="RegisterDataProvider" \
50+
-gas-fee="1000000ugnot" \
51+
-gas-wanted="3000000" \
52+
-remote="${REMOTE}" \
53+
-chainid="${CHAIN_ID}" \
54+
-broadcast \
55+
-args "gno.land/r/teritori/providers/random_pusher" \
56+
${KEY}
57+
58+
push_worx:
59+
gnokey maketx call \
60+
-pkgpath "gno.land/r/${BASE}/providers/random_pusher" \
61+
-func="RandWorx" \
62+
-gas-fee="1000000ugnot" \
63+
-gas-wanted="3000000" \
64+
-remote="${REMOTE}" \
65+
-chainid="${CHAIN_ID}" \
66+
-broadcast \
67+
-args "g14vxq5e5pt5sev7rkz2ej438scmxtylnzv5vnkw" \
68+
${KEY}
69+
70+
all: add_utf16_pkg add_ujson_pkg add_flags_index_pkg add_dao_interfaces_pkg add_social_feeds_realm add_social_feed

examples/gno.land/p/demo/teritori/worx/worxs.gno

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@ package worx
33
import (
44
"gno.land/p/demo/avl"
55
"gno.land/p/demo/ufmt"
6+
"time"
67
)
78

89
type WorxKeeper struct {
9-
worxs []*Worx
10+
worxs *avl.Tree
1011
}
1112

1213
const dayToSeconds = 1
@@ -18,7 +19,16 @@ func NewWorxKeeper() *WorxKeeper {
1819
}
1920

2021
func (keeper *WorxKeeper) Store(worx *Worx) {
21-
keeper.worxs = append(keeper.worxs, worx)
22+
storekey := ufmt.Sprintf("%d", time.Now().Unix())
23+
worxs, ok:= keeper.worxs.Get(storekey)
24+
if ok {
25+
worxsOnDay := worxs.([]*Worx)
26+
worxsOnDay = append(worxsOnDay, worx)
27+
keeper.worxs.Set(storekey, worxsOnDay)
28+
return
29+
}
30+
31+
keeper.worxs.Set(storekey, []*Worx{worx})
2232
}
2333

2434
func (keeper *WorxKeeper) Get() []*Worx {
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package worx
2+
3+
import (
4+
"testing"
5+
"gno.land/p/demo/rand"
6+
"gno.land/p/demo/testutils"
7+
"gno.land/p/demo/ufmt"
8+
"std"
9+
)
10+
11+
func TestAddGet(t *testing.T) {
12+
keeper := NewWorxKeeper()
13+
user1 := testutils.TestAddress("user1")
14+
if len(keeper.Get()) != 0{
15+
t.Fatalf("Keeper is not empty initialized")
16+
}
17+
18+
fillRandomWorx(keeper, 10123423, user1)
19+
if len(keeper.Get()) != 1{
20+
t.Fatalf("Keeper Worx was not added to keeper 1")
21+
}
22+
23+
fillRandomWorx(keeper, 10123423, user1)
24+
if len(keeper.Get()) != 2{
25+
t.Fatalf("Keeper Worx was not added to keeper 2")
26+
}
27+
}
28+
29+
func TestGetFromDate(t *testing.T) {
30+
keeper := NewWorxKeeper()
31+
user1 := testutils.TestAddress("user1")
32+
if len(keeper.Get()) != 0{
33+
t.Fatalf("Keeper is not empty initialized")
34+
}
35+
36+
for i:=0; i < 100; i++ {
37+
fillRandomWorx(keeper, int64(i*10), user1)
38+
}
39+
40+
if len(keeper.Get()) != 100{
41+
t.Fatalf("Keeper Worx was not totally added")
42+
}
43+
44+
if len(keeper.GetFromDate(1003)) != 0 {
45+
t.Fatalf("Get From Date Should have found 0 registers")
46+
}
47+
48+
if len(keeper.GetFromDate(903)) != 9 {
49+
t.Fatalf("Get From Date Should have found 9 registers")
50+
}
51+
52+
}
53+
54+
func fillRandomWorx(keeper *WorxKeeper, timestamp int64, address std.Address){
55+
r := rand.New()
56+
keeper.Store(NewWorx(
57+
r.Intn(25),
58+
"somekey",
59+
address,
60+
r.Intn(100),
61+
timestamp,
62+
))
63+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
module gno.land/r/demo/teritori/random_pusher
2+
3+
require (
4+
gno.land/p/demo/avl v0.0.0-latest
5+
gno.land/p/demo/testutils v0.0.0-latest
6+
)
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package random_pusher
2+
3+
import (
4+
"std"
5+
"gno.land/r/teritori/worx_aggregator"
6+
"math/rand"
7+
)
8+
9+
var admin std.Address
10+
11+
func init() {
12+
admin = std.GetOrigCaller()
13+
14+
}
15+
16+
var rSeed = rand.NewPCG(0, 0)
17+
18+
func RandWorx(addr std.Address){
19+
r := rand.New(rSeed)
20+
21+
worx_aggregator.Push(r.IntN(25), "", addr, r.IntN(100), std.GetHeight())
22+
}

examples/gno.land/r/demo/teritori/providers/worx_dao.gno

Lines changed: 0 additions & 18 deletions
This file was deleted.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package worx_aggregator
2+
3+
import (
4+
"std"
5+
)
6+
7+
var adminAddr std.Address
8+
9+
func assertIsAdmin() {
10+
if std.PrevRealm().Addr() != adminAddr {
11+
panic("restricted area")
12+
}
13+
}
14+
15+
func setAdminAddress(address std.Address) {
16+
adminAddr = address
17+
}
18+
19+
func SetAdminAddress(address std.Address) {
20+
assertIsAdmin()
21+
setAdminAddress(address)
22+
}

examples/gno.land/r/demo/teritori/worx_aggregator/aggregator.gno

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ package worx_aggregator
33
import (
44
"std"
55

6-
"gno.land/p/demo/teritori/worx"
6+
"gno.land/p/teritori/worx"
7+
"strings"
78
)
89

910
func GetWorx(addr std.Address) []*worx.Worx {
@@ -15,3 +16,32 @@ func GetWorxFromDate(addr std.Address, date int64) []*worx.Worx {
1516
keeper := getKeeper(addr)
1617
return keeper.GetFromDate(date)
1718
}
19+
20+
// Render renders the state of the realm
21+
func Render(path string) string {
22+
parts := strings.Split(path, "/")
23+
c := len(parts)
24+
25+
switch {
26+
case path == "":
27+
res := "Registered Dataproviders \n"
28+
registeredProviders.Iterate("", "", func(key string, value interface{}) bool {
29+
res += key + "\n"
30+
return false
31+
})
32+
33+
return res
34+
case c == 1:
35+
// Render worx for this address
36+
owner := std.Address(parts[0])
37+
worxs := GetWorx(owner)
38+
res := "user Worxs:\n"
39+
for _, worx := range worxs {
40+
res += worx.Metadata + "\n"
41+
}
42+
43+
return res
44+
default:
45+
return "404\n"
46+
}
47+
}

examples/gno.land/r/demo/teritori/worx_aggregator/worx.gno

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,23 @@ import (
44
"std"
55

66
"gno.land/p/demo/avl"
7-
"gno.land/p/demo/teritori/worx"
7+
"gno.land/p/teritori/worx"
88
)
99

1010
var (
11-
admin std.Address
12-
registeredProviders avl.Tree
13-
worxByAddress avl.Tree
11+
registeredProviders *avl.Tree
12+
worxByAddress *avl.Tree
1413
)
1514

15+
func init() {
16+
registeredProviders = avl.NewTree()
17+
worxByAddress = avl.NewTree()
18+
setAdminAddress(std.PrevRealm().Addr())
19+
}
20+
1621
func Push(hours int, metadata string, addr std.Address, points int, timestamp int64) {
17-
assertRegistered(addr)
22+
providerPath := std.PrevRealm().PkgPath()
23+
assertRegistered(providerPath)
1824

1925
keeper := getKeeper(addr)
2026
keeper.Store(worx.NewWorx(hours, metadata, addr, points, timestamp))
@@ -31,28 +37,29 @@ func getKeeper(addr std.Address) *worx.WorxKeeper {
3137
if ok {
3238
return data.(*worx.WorxKeeper)
3339
}
34-
return &worx.WorxKeeper{}
40+
return worx.NewWorxKeeper()
41+
}
42+
43+
func getDataProviderKeeper(packagePath string) *worx.WorxKeeper {
44+
data, ok := registeredProviders.Get(packagePath)
45+
if ok {
46+
return data.(*worx.WorxKeeper)
47+
}
48+
return worx.NewWorxKeeper()
3549
}
3650

3751
func RegisterDataProvider(addr std.Address) {
38-
assertAdmin()
52+
assertIsAdmin()
3953
_, ok := registeredProviders.Get(string(addr))
40-
if !ok {
54+
if ok {
4155
panic("Data provider already registered")
4256
}
4357
registeredProviders.Set(string(addr), 0)
4458
}
4559

46-
func assertRegistered(addr std.Address) {
47-
prevRealm := std.PrevRealm().Addr()
48-
dataProviders, ok := registeredProviders.Get(string(prevRealm))
60+
func assertRegistered(packagePath string) {
61+
_, ok := registeredProviders.Get(packagePath)
4962
if !ok {
5063
panic("caller realm is not registered as provider")
5164
}
5265
}
53-
54-
func assertAdmin() {
55-
if std.PrevRealm().Addr() != admin {
56-
panic("unathorized")
57-
}
58-
}
Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package worx_aggregator
22

33
import (
4+
"std"
45
"testing"
6+
7+
"gno.land/p/demo/avl"
58
"gno.land/p/demo/testutils"
69
)
710

8-
func TestPushCallerNotRegistered(t * testing.T){
11+
func TestPushCallerNotRegistered(t *testing.T) {
912
user1 := testutils.TestAddress("user1")
1013
defer func() {
1114
if v := recover(); v == nil {
@@ -14,3 +17,22 @@ func TestPushCallerNotRegistered(t * testing.T){
1417
}()
1518
Push(1, "", user1, 3, 10)
1619
}
20+
21+
func TestHappyPath(t *testing.T) {
22+
registeredProviders = avl.NewTree()
23+
worxByAddress = avl.NewTree()
24+
25+
realm := testutils.TestAddress("realm")
26+
admin := testutils.TestAddress("admin")
27+
user1 := testutils.TestAddress("user1")
28+
29+
setAdminAddress(admin)
30+
31+
std.TestSetOrigCaller(admin)
32+
33+
RegisterDataProvider(realm)
34+
35+
std.TestSetOrigCaller(realm)
36+
37+
Push(1, "", user1, 3, 10)
38+
}

0 commit comments

Comments
 (0)