present_filetest.gno
7.97 Kb · 236 lines
1// PKGPATH: gno.land/r/moul/main
2
3package main
4
5import (
6 "testing"
7
8 "gno.land/r/g1magld5ptgzaktqcexxq0pgq5lmdf0kz6re8hlv/present/v0"
9)
10
11func main(cur realm) {
12 // Act as the realm owner so the owner-gated setters are allowed.
13 testing.SetRealm(testing.NewUserRealm(present.Ownable.Owner()))
14
15 // Cleanup initial state
16 ret := present.Delete(cross(cur), "demo")
17 if ret != "presentation deleted successfully" {
18 panic("internal error")
19 }
20
21 // Create presentations with IDs from 10-20
22 presentations := []struct {
23 id string
24 title string
25 event string
26 author string
27 date string
28 content string
29 }{
30 {"s10", "title10", "event3", "author1", "2024-01-01", "## s10.0\n## s10.1"},
31 {"s11", "title11", "event1", "author2", "2024-01-15", "## s11.0\n## s11.1"},
32 {"s12", "title12", "event2", "author1", "2024-02-01", "## s12.0\n## s12.1"},
33 {"s13", "title13", "event1", "author3", "2024-01-20", "## s13.0\n## s13.1"},
34 {"s14", "title14", "event3", "author2", "2024-03-01", "## s14.0\n## s14.1"},
35 {"s15", "title15", "event2", "author1", "2024-02-15", "## s15.0\n## s15.1\n## s15.2"},
36 {"s16", "title16", "event1", "author4", "2024-03-15", "## s16.0\n## s16.1"},
37 {"s17", "title17", "event3", "author2", "2024-01-10", "## s17.0\n## s17.1"},
38 {"s18", "title18", "event2", "author3", "2024-02-20", "## s18.0\n## s18.1"},
39 {"s19", "title19", "event1", "author1", "2024-03-10", "## s19.0\n## s19.1"},
40 {"s20", "title20", "event3", "author4", "2024-01-05", "## s20.0\n## s20.1"},
41 }
42
43 for _, p := range presentations {
44 result := present.Set(cross(cur), p.id, p.title, p.event, p.author, p.date, p.content)
45 if result != "presentation saved successfully" {
46 panic("failed to add presentation: " + result)
47 }
48 }
49
50 // Test different sorting scenarios
51 printRender("") // default
52 printRender("?order=asc&sort=date") // by date ascending
53 printRender("?order=asc&sort=title") // by title ascending
54 printRender("?order=asc&sort=author") // by author ascending (multiple entries per author)
55
56 // Test pagination
57 printRender("?order=asc&sort=title&page=2") // second page
58
59 // Test view
60 printRender("s15") // view by slug
61
62 // Test slides
63 printRender("s15/slides") // slides by slug
64 printRender("s15/slides?page=2") // slides by slug, second page
65 printRender("s15/slides?page=3") // slides by slug, third page
66 printRender("s15/slides?page=4") // slides by slug, fourth page
67 printRender("s15/slides?page=5") // slides by slug, fifth page
68}
69
70// Helper function to print path and render result
71func printRender(path string) {
72 println("+-------------------------------")
73 println("| PATH:", path)
74 println("| RESULT:\n" + present.Render(path) + "\n")
75}
76
77// Output:
78// +-------------------------------
79// | PATH:
80// | RESULT:
81// # Presentations
82// | [Date ↑](?order=asc&sort=date) | [Title](?order=desc&sort=title) | Event | [Author](?order=desc&sort=author) | Slides |
83// | --- | --- | --- | --- | --- |
84// | 2024-03-15 | [title16](:s16) | event1 | author4 | 4 |
85// | 2024-03-10 | [title19](:s19) | event1 | author1 | 4 |
86// | 2024-03-01 | [title14](:s14) | event3 | author2 | 4 |
87// | 2024-02-20 | [title18](:s18) | event2 | author3 | 4 |
88// | 2024-02-15 | [title15](:s15) | event2 | author1 | 5 |
89// | 2024-02-01 | [title12](:s12) | event2 | author1 | 4 |
90// | 2024-01-20 | [title13](:s13) | event1 | author3 | 4 |
91// | 2024-01-15 | [title11](:s11) | event1 | author2 | 4 |
92// | 2024-01-10 | [title17](:s17) | event3 | author2 | 4 |
93// | 2024-01-05 | [title20](:s20) | event3 | author4 | 4 |
94// **1** | [2](?page=2&order=desc&sort=author)
95//
96// +-------------------------------
97// | PATH: ?order=asc&sort=date
98// | RESULT:
99// # Presentations
100// | [Date ↓](?order=desc&sort=date) | [Title](?order=desc&sort=title) | Event | [Author](?order=desc&sort=author) | Slides |
101// | --- | --- | --- | --- | --- |
102// | 2024-01-01 | [title10](:s10) | event3 | author1 | 4 |
103// | 2024-01-05 | [title20](:s20) | event3 | author4 | 4 |
104// | 2024-01-10 | [title17](:s17) | event3 | author2 | 4 |
105// | 2024-01-15 | [title11](:s11) | event1 | author2 | 4 |
106// | 2024-01-20 | [title13](:s13) | event1 | author3 | 4 |
107// | 2024-02-01 | [title12](:s12) | event2 | author1 | 4 |
108// | 2024-02-15 | [title15](:s15) | event2 | author1 | 5 |
109// | 2024-02-20 | [title18](:s18) | event2 | author3 | 4 |
110// | 2024-03-01 | [title14](:s14) | event3 | author2 | 4 |
111// | 2024-03-10 | [title19](:s19) | event1 | author1 | 4 |
112// **1** | [2](?page=2&order=desc&sort=author)
113//
114// +-------------------------------
115// | PATH: ?order=asc&sort=title
116// | RESULT:
117// # Presentations
118// | [Date](?order=desc&sort=date) | [Title](?order=desc&sort=title) | Event | [Author](?order=desc&sort=author) | Slides |
119// | --- | --- | --- | --- | --- |
120// | 2024-01-01 | [title10](:s10) | event3 | author1 | 4 |
121// | 2024-01-15 | [title11](:s11) | event1 | author2 | 4 |
122// | 2024-02-01 | [title12](:s12) | event2 | author1 | 4 |
123// | 2024-01-20 | [title13](:s13) | event1 | author3 | 4 |
124// | 2024-03-01 | [title14](:s14) | event3 | author2 | 4 |
125// | 2024-02-15 | [title15](:s15) | event2 | author1 | 5 |
126// | 2024-03-15 | [title16](:s16) | event1 | author4 | 4 |
127// | 2024-01-10 | [title17](:s17) | event3 | author2 | 4 |
128// | 2024-02-20 | [title18](:s18) | event2 | author3 | 4 |
129// | 2024-03-10 | [title19](:s19) | event1 | author1 | 4 |
130// **1** | [2](?page=2&order=desc&sort=author)
131//
132// +-------------------------------
133// | PATH: ?order=asc&sort=author
134// | RESULT:
135// # Presentations
136// | [Date](?order=desc&sort=date) | [Title](?order=desc&sort=title) | Event | [Author](?order=desc&sort=author) | Slides |
137// | --- | --- | --- | --- | --- |
138// | 2024-01-01 | [title10](:s10) | event3 | author1 | 4 |
139// | 2024-02-01 | [title12](:s12) | event2 | author1 | 4 |
140// | 2024-02-15 | [title15](:s15) | event2 | author1 | 5 |
141// | 2024-03-10 | [title19](:s19) | event1 | author1 | 4 |
142// | 2024-01-15 | [title11](:s11) | event1 | author2 | 4 |
143// | 2024-03-01 | [title14](:s14) | event3 | author2 | 4 |
144// | 2024-01-10 | [title17](:s17) | event3 | author2 | 4 |
145// | 2024-01-20 | [title13](:s13) | event1 | author3 | 4 |
146// | 2024-02-20 | [title18](:s18) | event2 | author3 | 4 |
147// | 2024-03-15 | [title16](:s16) | event1 | author4 | 4 |
148// **1** | [2](?page=2&order=desc&sort=author)
149//
150// +-------------------------------
151// | PATH: ?order=asc&sort=title&page=2
152// | RESULT:
153// # Presentations
154// | [Date](?order=desc&page=2&sort=date) | [Title](?order=desc&page=2&sort=title) | Event | [Author](?order=desc&page=2&sort=author) | Slides |
155// | --- | --- | --- | --- | --- |
156// | 2024-01-05 | [title20](:s20) | event3 | author4 | 4 |
157// [1](?page=1&order=desc&sort=author) | **2**
158//
159// +-------------------------------
160// | PATH: s15
161// | RESULT:
162// # title15
163// **event2**, 15 Feb 2024
164//
165// by **author1**
166//
167// [View as slides](:s15/slides)
168//
169// ---
170// ## s15.0
171// ## s15.1
172// ## s15.2
173//
174// ---
175// Last edited: 2009-02-13 23:31:30
176//
177// Uploader: `g1manfred47kzduec920z88wfr64ylksmdcedlf5`
178//
179// Number of slides: 5
180//
181// [Edit]($help&func=Set&author=author1&date=2024-02-15&event=event2&slug=s15&title=title15) | [Delete]($help&func=Delete&slug=s15)
182//
183//
184//
185// +-------------------------------
186// | PATH: s15/slides
187// | RESULT:
188// # title15
189// **event2**, 15 Feb 2024
190//
191// by **author1**
192//
193// | 1/5 | [Next →](:s15/slides?page=2)
194//
195//
196//
197// +-------------------------------
198// | PATH: s15/slides?page=2
199// | RESULT:
200// # title15
201// ## s15.0
202//
203// [← Prev](:s15/slides?page=1) | 2/5 | [Next →](:s15/slides?page=3)
204//
205//
206//
207// +-------------------------------
208// | PATH: s15/slides?page=3
209// | RESULT:
210// # title15
211// ## s15.1
212//
213// [← Prev](:s15/slides?page=2) | 3/5 | [Next →](:s15/slides?page=4)
214//
215//
216//
217// +-------------------------------
218// | PATH: s15/slides?page=4
219// | RESULT:
220// # title15
221// ## s15.2
222//
223// [← Prev](:s15/slides?page=3) | 4/5 | [Next →](:s15/slides?page=5)
224//
225//
226//
227// +-------------------------------
228// | PATH: s15/slides?page=5
229// | RESULT:
230// # title15
231// ## Thank You!
232// author1
233//
234// 🔗 [https://gno\.land:s15](https://gno.land:s15)
235//
236// [← Prev](:s15/slides?page=4) | 5/5 |