Skip to content

Commit

Permalink
Restore AgendaReceiver tests
Browse files Browse the repository at this point in the history
  • Loading branch information
zmoog committed Mar 12, 2024
1 parent bd54429 commit c7cfc58
Show file tree
Hide file tree
Showing 7 changed files with 147 additions and 115 deletions.
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ build:
go build -o classeviva -v entrypoints/cli/main.go

mock:
mockery --dir adapters/spaggiari --name AgendaReceiver
mockery --dir adapters/spaggiari --name Client
mockery --dir adapters/spaggiari --name Fetcher
mockery --dir adapters/spaggiari --name GradesReceiver
Expand Down
51 changes: 4 additions & 47 deletions adapters/spaggiari/agenda.go
Original file line number Diff line number Diff line change
@@ -1,53 +1,10 @@
package spaggiari

import (
"time"
"encoding/json"
"time"
)

// func (c SpaggiariAdapter) ListAgenda(since, until time.Time) ([]AgendaEntry, error) {
// identity, err := c.IdentityProvider.Get()
// if err != nil {
// return []AgendaEntry{}, err
// }

// _since := since.Format("20060102")
// _until := until.Format("20060102")

// url := baseUrl + "/students/" + identity.ID + "/agenda/all/" + _since + "/" + _until
// log.Trace(string(url))

// req, err := c.newRequest("GET", url, nil, identity)
// if err != nil {
// return []AgendaEntry{}, err
// }

// resp, err := c.client.Do(req)
// if err != nil {
// return []AgendaEntry{}, err
// }
// defer resp.Body.Close()

// if resp.StatusCode != 200 {
// return []AgendaEntry{}, fmt.Errorf("failed to fetch agenda entries, status_code: %d", resp.StatusCode)
// }

// body, err := io.ReadAll(resp.Body)
// if err != nil {
// return []AgendaEntry{}, err
// }
// log.Trace(string(body))

// envelope := map[string][]AgendaEntry{}

// err = json.Unmarshal(body, &envelope)
// if err != nil {
// return []AgendaEntry{}, err
// }

// return envelope["agenda"], nil
// }

type AgendaReceiver interface {
List(since, until time.Time) ([]AgendaEntry, error)
}
Expand All @@ -68,7 +25,7 @@ func (r agendaReceiver) List(since, until time.Time) ([]AgendaEntry, error) {

url := baseUrl + "/students/" + identity.ID + "/agenda/all/" + _since + "/" + _until

items := []AgendaEntry{}
entries := []AgendaEntry{}

err = r.Client.Get(url, func(body []byte) error {
envelope := map[string][]AgendaEntry{}
Expand All @@ -78,10 +35,10 @@ func (r agendaReceiver) List(since, until time.Time) ([]AgendaEntry, error) {
return err
}

items = envelope["agenda"]
entries = envelope["agenda"]

return nil
})

return items, nil
return entries, nil
}
1 change: 0 additions & 1 deletion adapters/spaggiari/spaggiari.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ type Adapter struct {
Noticeboards NoticeboardsReceiver
}

//go:generate mockery --name Client
type Client interface {
Get(url string, unmarshal Unmarshal) error
}
Expand Down
135 changes: 74 additions & 61 deletions commands/agenda_test.go
Original file line number Diff line number Diff line change
@@ -1,63 +1,76 @@
package commands_test

// func TestListAgendaCommand(t *testing.T) {
// t.Run("Empty agenda items list", func(t *testing.T) {
// mockAdapter := mocks.Adapter{}
// mockAdapter.On(
// "ListAgenda",
// mock.AnythingOfType("time.Time"),
// mock.AnythingOfType("time.Time"),
// ).Return([]spaggiari.AgendaEntry{}, nil)

// stdout := bytes.Buffer{}
// stderr := bytes.Buffer{}
// fb := feedback.New(&stdout, &stderr, feedback.Text)
// feedback.SetDefault(fb)

// uow := commands.UnitOfWork{Adapter: &mockAdapter, Feedback: fb}

// cmd := commands.ListAgendaCommand{Limit: 10}

// err := cmd.ExecuteWith(uow)
// assert.Nil(t, err)
// assert.Equal(t, stdout.String(), "No entries in this interval.")
// assert.Equal(t, stderr.String(), "")

// mockAdapter.AssertExpectations(t)
// })

// t.Run("List 5 agenda entries", func(t *testing.T) {
// entries := []spaggiari.AgendaEntry{}
// if err := UnmarshalFrom("testdata/agenda.json", &entries); err != nil {
// t.Error(err)
// }

// mockAdapter := mocks.Adapter{}
// mockAdapter.On(
// "ListAgenda",
// mock.AnythingOfType("time.Time"),
// mock.AnythingOfType("time.Time"),
// ).Return(entries, nil)

// stdout := bytes.Buffer{}
// stderr := bytes.Buffer{}
// fb := feedback.New(&stdout, &stderr, feedback.Text)
// feedback.SetDefault(fb)

// uow := commands.UnitOfWork{Adapter: &mockAdapter, Feedback: fb}
// cmd := commands.ListAgendaCommand{Limit: 10}

// err := cmd.ExecuteWith(uow)
// assert.Nil(t, err)

// expected, err := os.ReadFile("testdata/agenda.out.txt")
// if err != nil {
// t.Errorf("can't read test data from %v: %v", "testdata/agenda.out.txt", err)
// }

// assert.Equal(t, stdout.String(), string(expected))
// assert.Equal(t, stderr.String(), "")

// mockAdapter.AssertExpectations(t)
// })
// }
import (
"bytes"
"os"
"testing"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"github.com/zmoog/classeviva/adapters/feedback"
"github.com/zmoog/classeviva/adapters/spaggiari"
"github.com/zmoog/classeviva/commands"
"github.com/zmoog/classeviva/mocks"
)

func TestListAgendaCommand(t *testing.T) {
t.Run("Empty agenda items list", func(t *testing.T) {
agendaReveiver := mocks.NewAgendaReceiver(t)
agendaReveiver.On(
"List",
mock.AnythingOfType("time.Time"),
mock.AnythingOfType("time.Time"),
).Return([]spaggiari.AgendaEntry{}, nil)

adapter := spaggiari.Adapter{Agenda: agendaReveiver}

stdout := bytes.Buffer{}
stderr := bytes.Buffer{}
fb := feedback.New(&stdout, &stderr, feedback.Text)
feedback.SetDefault(fb)

uow := commands.UnitOfWork{Adapter: adapter}

cmd := commands.ListAgendaCommand{Limit: 10}

err := cmd.ExecuteWith(uow)
assert.Nil(t, err)
assert.Equal(t, stdout.String(), "No entries in this interval.")
assert.Equal(t, stderr.String(), "")
})

t.Run("List 5 agenda entries", func(t *testing.T) {
entries := []spaggiari.AgendaEntry{}
if err := UnmarshalFrom("testdata/agenda.json", &entries); err != nil {
t.Error(err)
}

agendaReveiver := mocks.NewAgendaReceiver(t)
agendaReveiver.On(
"List",
mock.AnythingOfType("time.Time"),
mock.AnythingOfType("time.Time"),
).Return(entries, nil)

adapter := spaggiari.Adapter{Agenda: agendaReveiver}

stdout := bytes.Buffer{}
stderr := bytes.Buffer{}
fb := feedback.New(&stdout, &stderr, feedback.Text)
feedback.SetDefault(fb)

uow := commands.UnitOfWork{Adapter: adapter}
cmd := commands.ListAgendaCommand{Limit: 10}

err := cmd.ExecuteWith(uow)
assert.Nil(t, err)

expected, err := os.ReadFile("testdata/agenda.out.txt")
if err != nil {
t.Errorf("can't read test data from %v: %v", "testdata/agenda.out.txt", err)
}

assert.Equal(t, stdout.String(), string(expected))
assert.Equal(t, stderr.String(), "")
})
}
9 changes: 6 additions & 3 deletions commands/grades_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ func TestListGradesCommand(t *testing.T) {
feedback.SetDefault(fb)

uow := commands.UnitOfWork{
Adapter: adapter,
Feedback: fb,
Adapter: adapter,
// Feedback: fb,
}

cmd := commands.ListGradesCommand{Limit: 100}
Expand Down Expand Up @@ -59,7 +59,10 @@ func TestListGradesCommand(t *testing.T) {
fb := feedback.New(&stdout, &stderr, feedback.Text)
feedback.SetDefault(fb)

uow := commands.UnitOfWork{Adapter: adapter, Feedback: fb}
uow := commands.UnitOfWork{
Adapter: adapter,
// Feedback: fb,
}
cmd := commands.ListGradesCommand{Limit: 10}

err := cmd.ExecuteWith(uow)
Expand Down
6 changes: 3 additions & 3 deletions commands/version_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,14 @@ func TestVersion(t *testing.T) {
fb := feedback.New(&stdout, &stderr, feedback.Text)
feedback.SetDefault(fb)

uow := commands.UnitOfWork{Adapter: adapter, Feedback: fb}
uow := commands.UnitOfWork{Adapter: adapter}

cmd := commands.VersionCommand{}

err := cmd.ExecuteWith(uow)
assert.Nil(t, err)

assert.Equal(t, "Classeviva CLI v0.0.0 (123) 2022-05-08 by zmoog", stdout.String())
assert.Equal(t, "Classeviva CLI v0.0.0 (123) 2022-05-08 by zmoog\n", stdout.String())
assert.Equal(t, "", stderr.String())
})

Expand All @@ -38,7 +38,7 @@ func TestVersion(t *testing.T) {
fb := feedback.New(&stdout, &stderr, feedback.JSON)
feedback.SetDefault(fb)

uow := commands.UnitOfWork{Adapter: adapter, Feedback: fb}
uow := commands.UnitOfWork{Adapter: adapter}

cmd := commands.VersionCommand{}

Expand Down
59 changes: 59 additions & 0 deletions mocks/AgendaReceiver.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit c7cfc58

Please sign in to comment.