Skip to content

Commit

Permalink
fix LastBuild in ProjectBuildSummary
Browse files Browse the repository at this point in the history
  • Loading branch information
dgkanatsios committed Jan 23, 2019
1 parent fbebdb5 commit c82c6cc
Show file tree
Hide file tree
Showing 4 changed files with 92 additions and 34 deletions.
14 changes: 13 additions & 1 deletion pkg/api/project.go
Expand Up @@ -2,6 +2,7 @@ package api

import (
"net/http"
"sort"

restful "github.com/emicklei/go-restful"

Expand Down Expand Up @@ -37,17 +38,28 @@ func (api Project) ListWithLatestBuild(request *restful.Request, response *restf
response.WriteErrorString(http.StatusNotFound, "No Projects found.")
return
}
res := api.getBuildSummariesForProjects(projects)

response.WriteHeaderAndEntity(http.StatusOK, res)
}

func (api Project) getBuildSummariesForProjects(projects []*brigade.Project) []*ProjectBuildSummary {
res := []*ProjectBuildSummary{}
for _, p := range projects {
pbs := &ProjectBuildSummary{Project: p}
builds, err := api.store.GetProjectBuilds(p)
if err == nil && len(builds) > 0 {
sort.Slice(builds, func(i, j int) bool {
if builds[i].Worker == nil || builds[j].Worker == nil {
return false
}
return builds[i].Worker.StartTime.Before(builds[j].Worker.StartTime)
})
pbs.LastBuild = builds[len(builds)-1]
}
res = append(res, pbs)
}
response.WriteHeaderAndEntity(http.StatusOK, res)
return res
}

// Get creates a new gin handler for the GET /project/:id endpoint
Expand Down
23 changes: 23 additions & 0 deletions pkg/api/project_test.go
@@ -0,0 +1,23 @@
package api

import (
"testing"

"github.com/Azure/brigade/pkg/storage/mock"
)

func TestGetBuildSummariesForProjects(t *testing.T) {
project := &Project{
store: mock.New(),
}

projects, err := project.store.GetProjects()
if err != nil {
t.Fatalf("error: %s", err.Error())
}
projectSummaries := project.getBuildSummariesForProjects(projects)

if projectSummaries[0].LastBuild.ID != "build-id1" {
t.Fatal("wrong BuildID in getBuildSummariesForProjects")
}
}
65 changes: 44 additions & 21 deletions pkg/storage/mock/storage.go
Expand Up @@ -21,28 +21,51 @@ var (
SharedSecret: "shared-secre3t",
Secrets: map[string]string{"key": "value"},
}
// StubWorker is a stub Worker. It is used in StubBuild, too.
StubWorker = &brigade.Worker{
ID: "worker-id",
BuildID: "build-id",
// StubWorker1 is a stub Worker. It is used in StubBuild1, too.
StubWorker1 = &brigade.Worker{
ID: "worker-id1",
BuildID: "build-id1",
ProjectID: "project-id",
StartTime: Now,
EndTime: Now,
ExitCode: 0,
Status: brigade.JobSucceeded,
}
// StubBuild is a stub Build.
StubBuild = &brigade.Build{
ID: "build-id",
// StubWorker2 is a stub Worker. It is used in StubBuild2, too.
StubWorker2 = &brigade.Worker{
ID: "worker-id2",
BuildID: "build-id2",
ProjectID: "project-id",
StartTime: Now.AddDate(0, 0, -1),
EndTime: Now,
ExitCode: 0,
Status: brigade.JobSucceeded,
}
// StubBuild1 is a stub Build.
StubBuild1 = &brigade.Build{
ID: "build-id1", // do not change this as it's used in LastBuild related tests on Brigade API
ProjectID: "project-id",
Revision: &brigade.Revision{
Commit: "commit1",
},
Type: "type",
Provider: "provider",
Payload: []byte("payload"),
Script: []byte("script"),
Worker: StubWorker1,
}
// StubBuild2 is another stub Build.
StubBuild2 = &brigade.Build{
ID: "build-id2",
ProjectID: "project-id",
Revision: &brigade.Revision{
Commit: "commit",
Commit: "commit2",
},
Type: "type",
Provider: "provider",
Payload: []byte("payload"),
Script: []byte("script"),
Worker: StubWorker,
Worker: StubWorker2,
}
// StubJob is a stub Job.
StubJob = &brigade.Job{
Expand All @@ -63,21 +86,21 @@ var (
func New() *Store {
return &Store{
ProjectList: []*brigade.Project{StubProject},
Worker: StubWorker,
Build: StubBuild,
Workers: []*brigade.Worker{StubWorker1, StubWorker2},
Builds: []*brigade.Build{StubBuild1, StubBuild2},
Job: StubJob,
LogData: StubLogData,
}
}

// Store implements the storage.Storage interface, but returns mock data.
type Store struct {
// Build is the build you want returned.
Build *brigade.Build
// Builds is a slice of Builds.
Builds []*brigade.Build
// Job is the job you want returned.
Job *brigade.Job
// Worker is the worker you want returned.
Worker *brigade.Worker
// Workers is a slice of workers.
Workers []*brigade.Worker
// LogData is the log data you want returned.
LogData string
// ProjectList on this mock
Expand Down Expand Up @@ -142,22 +165,22 @@ func (s *Store) GetProjectBuilds(p *brigade.Project) ([]*brigade.Build, error) {

// GetBuilds returns the mock build wrapped in a slice.
func (s *Store) GetBuilds() ([]*brigade.Build, error) {
return []*brigade.Build{s.Build}, nil
return s.Builds, nil
}

// GetBuild gets the mock Build.
// GetBuild gets the first mock Build.
func (s *Store) GetBuild(id string) (*brigade.Build, error) {
return s.Build, nil
return s.Builds[0], nil
}

// GetBuildJobs gets the mock job wrapped in a slice.
func (s *Store) GetBuildJobs(b *brigade.Build) ([]*brigade.Job, error) {
return []*brigade.Job{s.Job}, nil
}

// GetWorker gets the mock worker.
// GetWorker gets the first mock worker.
func (s *Store) GetWorker(bid string) (*brigade.Worker, error) {
return s.Worker, nil
return s.Workers[0], nil
}

// GetJob gets the mock job.
Expand Down Expand Up @@ -197,7 +220,7 @@ func (s *Store) GetWorkerLogStreamFollow(w *brigade.Worker) (io.ReadCloser, erro

// CreateBuild fakes a new build.
func (s *Store) CreateBuild(b *brigade.Build) error {
s.Build = b
s.Builds[0] = b
return nil
}

Expand Down
24 changes: 12 additions & 12 deletions pkg/storage/mock/storage_test.go
Expand Up @@ -21,8 +21,8 @@ func TestStore(t *testing.T) {
}
}
assertSame("project", StubProject, m.ProjectList[0])
assertSame("worker", StubWorker, m.Worker)
assertSame("build", StubBuild, m.Build)
assertSame("worker", StubWorker1, m.Workers[0])
assertSame("builds", StubBuild1, m.Builds[0])
assertSame("job", StubJob, m.Job)
assertSame("log data", StubLogData, m.LogData)

Expand All @@ -34,22 +34,22 @@ func TestStore(t *testing.T) {
assertSame("GetProject", StubProject, extraProj)

b1, _ := m.GetProjectBuilds(StubProject)
assertSame("GetProjectBuilds", StubBuild, b1[0])
assertSame("GetProjectBuilds", StubBuild1, b1[0])

b2, _ := m.GetBuilds()
assertSame("GetBuilds", StubBuild, b2[0])
assertSame("GetBuilds", StubBuild1, b2[0])

b3, _ := m.GetBuild(StubBuild.ID)
assertSame("GetBuild", StubBuild, b3)
b3, _ := m.GetBuild(StubBuild1.ID)
assertSame("GetBuild", StubBuild1, b3)

j1, _ := m.GetBuildJobs(StubBuild)
j1, _ := m.GetBuildJobs(StubBuild1)
assertSame("GetBuildJobs", StubJob, j1[0])

j2, _ := m.GetJob(StubJob.ID)
assertSame("GetJob", StubJob, j2)

w1, _ := m.GetWorker(StubBuild.ID)
assertSame("GetWorker", StubWorker, w1)
w1, _ := m.GetWorker(StubBuild1.ID)
assertSame("GetWorker", StubWorker1, w1)

jl, _ := m.GetJobLog(StubJob)
assertSame("GetJobLog", StubLogData, jl)
Expand All @@ -64,15 +64,15 @@ func TestStore(t *testing.T) {
bjlsf.ReadFrom(jlsf)
assertSame("GetJobLogStreamFollow", StubLogData, bjlsf.String())

wl, _ := m.GetWorkerLog(StubWorker)
wl, _ := m.GetWorkerLog(StubWorker1)
assertSame("GetWorkerLog", StubLogData, wl)

wls, _ := m.GetWorkerLogStream(StubWorker)
wls, _ := m.GetWorkerLogStream(StubWorker1)
bwls := new(bytes.Buffer)
bwls.ReadFrom(wls)
assertSame("GetWorkerLogStream", StubLogData, bwls.String())

wlsf, _ := m.GetWorkerLogStreamFollow(StubWorker)
wlsf, _ := m.GetWorkerLogStreamFollow(StubWorker1)
bwlsf := new(bytes.Buffer)
bwlsf.ReadFrom(wlsf)
assertSame("GetWorkerLogStreamFollow", StubLogData, bwlsf.String())
Expand Down

0 comments on commit c82c6cc

Please sign in to comment.