Skip to content

Commit 072e8ac

Browse files
Expose project UpdatedAt time (#116)
* Expose project updatedAt time * DB handles project updated time * Test time difference * Test time difference * Test time difference * retrigger checks
1 parent 415abe8 commit 072e8ac

File tree

7 files changed

+148
-3
lines changed

7 files changed

+148
-3
lines changed

controller/projects.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,11 @@ import (
2323
"github.com/Masterminds/semver"
2424
"github.com/dapperlabs/flow-playground-api/auth"
2525
"github.com/dapperlabs/flow-playground-api/blockchain"
26+
"github.com/dapperlabs/flow-playground-api/model"
27+
"github.com/dapperlabs/flow-playground-api/storage"
2628
"github.com/google/uuid"
2729
"github.com/pkg/errors"
2830
"strconv"
29-
30-
"github.com/dapperlabs/flow-playground-api/model"
31-
"github.com/dapperlabs/flow-playground-api/storage"
3231
)
3332

3433
// MaxProjectsLimit limit on the number of projects a user can create

e2eTest/constants.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ type Project struct {
3535
Persist bool
3636
Version string
3737
NumberOfAccounts int
38+
UpdatedAt string
3839
Accounts []Account
3940
TransactionTemplates []TransactionTemplate
4041
ScriptTemplates []ScriptTemplate
@@ -57,6 +58,7 @@ mutation($title: String!, $description: String!, $readme: String!, $seed: Int!,
5758
readme
5859
seed
5960
numberOfAccounts
61+
updatedAt
6062
accounts {
6163
address
6264
deployedContracts
@@ -116,6 +118,7 @@ const QueryGetProject = `
116118
query($projectId: UUID!) {
117119
project(id: $projectId) {
118120
id
121+
updatedAt
119122
}
120123
}
121124
`
@@ -148,18 +151,22 @@ mutation($projectId: UUID!, $title: String!, $description: String!, $readme: Str
148151
title
149152
description
150153
readme
154+
updatedAt
151155
persist
152156
}
153157
}
154158
`
155159

156160
type UpdateProjectResponse struct {
161+
//UpdateProject Project
162+
157163
UpdateProject struct {
158164
ID string
159165
Title string
160166
Description string
161167
Readme string
162168
Persist bool
169+
UpdatedAt string
163170
}
164171
}
165172

e2eTest/project_test.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"github.com/stretchr/testify/require"
2727
"strconv"
2828
"testing"
29+
"time"
2930
)
3031

3132
func TestProjects(t *testing.T) {
@@ -314,6 +315,51 @@ func TestProjects(t *testing.T) {
314315

315316
}
316317

318+
func TestProjectSavedTime(t *testing.T) {
319+
c := newClient()
320+
321+
var projResp1 CreateProjectResponse
322+
err := c.Post(
323+
MutationCreateProject,
324+
&projResp1,
325+
client.Var("title", "foo1"),
326+
client.Var("description", "bar"),
327+
client.Var("readme", "bah"),
328+
client.Var("seed", 42),
329+
client.Var("numberOfAccounts", initAccounts),
330+
)
331+
require.NoError(t, err)
332+
require.NotEmpty(t, projResp1.CreateProject.UpdatedAt)
333+
334+
cookie := c.SessionCookie()
335+
projectID := projResp1.CreateProject.ID
336+
337+
time.Sleep(time.Second * 1)
338+
339+
var projResp2 UpdateProjectResponse
340+
err = c.Post(
341+
MutationUpdateProjectPersist,
342+
&projResp2,
343+
client.Var("projectId", projectID),
344+
client.Var("title", "updated title"),
345+
client.Var("description", "updated desc"),
346+
client.Var("readme", "updated readme"),
347+
client.Var("persist", true),
348+
client.AddCookie(cookie),
349+
)
350+
require.NoError(t, err)
351+
require.NotEmpty(t, projResp2.UpdateProject.UpdatedAt)
352+
353+
createdTime, _ := time.Parse(time.RFC1123Z, projResp1.CreateProject.UpdatedAt)
354+
updatedTime, _ := time.Parse(time.RFC1123Z, projResp2.UpdateProject.UpdatedAt)
355+
require.True(t, createdTime.Before(updatedTime))
356+
357+
fiveSeconds := int64(5000)
358+
require.True(t, updatedTime.UnixMilli()-createdTime.UnixMilli() < fiveSeconds)
359+
360+
require.NotEqual(t, projResp1.CreateProject.UpdatedAt, projResp2.UpdateProject.UpdatedAt)
361+
}
362+
317363
func TestGetProjectList(t *testing.T) {
318364
t.Run("get project list", func(t *testing.T) {
319365
c := newClient()

generated.go

Lines changed: 84 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

model/project.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ func (p *Project) ExportPublicMutable() *Project {
6363
Seed: p.Seed,
6464
NumberOfAccounts: p.NumberOfAccounts,
6565
Version: p.Version,
66+
UpdatedAt: p.UpdatedAt,
6667
Mutable: true,
6768
}
6869
}
@@ -81,6 +82,7 @@ func (p *Project) ExportPublicImmutable() *Project {
8182
Seed: p.Seed,
8283
NumberOfAccounts: p.NumberOfAccounts,
8384
Version: p.Version,
85+
UpdatedAt: p.UpdatedAt,
8486
Mutable: false,
8587
}
8688
}

resolver.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
"github.com/google/uuid"
3131
"github.com/onflow/cadence"
3232
"github.com/pkg/errors"
33+
"time"
3334
)
3435

3536
type Resolver struct {
@@ -393,6 +394,10 @@ func (r *projectResolver) Accounts(_ context.Context, proj *model.Project) ([]*m
393394
return adapter.AccountsToAPI(accounts), nil
394395
}
395396

397+
func (r *projectResolver) UpdatedAt(_ context.Context, proj *model.Project) (string, error) {
398+
return proj.UpdatedAt.Format(time.RFC1123Z), nil
399+
}
400+
396401
type queryResolver struct{ *Resolver }
397402

398403
func (r *queryResolver) PlaygroundInfo(_ context.Context) (*model.PlaygroundInfo, error) {

schema.graphql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ type Project {
1717
seed: Int!
1818
version: Version!
1919
persist: Boolean
20+
updatedAt: String!
2021
mutable: Boolean
2122
numberOfAccounts: Int!
2223
accounts: [Account!]
@@ -124,6 +125,7 @@ type Query {
124125
playgroundInfo: PlaygroundInfo!
125126
projectList: ProjectList!
126127
project(id: UUID!): Project!
128+
127129
account(address: Address!, projectId: UUID!): Account!
128130

129131
contractTemplate(id: UUID!, projectId: UUID!): ContractTemplate!

0 commit comments

Comments
 (0)