send command

This commit is contained in:
Erik Winter 2021-09-03 09:31:41 +02:00
parent a296c257ad
commit 516f0923f5
4 changed files with 52 additions and 7 deletions

View File

@ -33,6 +33,8 @@ func Parse(args []string, conf *configuration.Configuration) (Command, error) {
switch cmd {
case "fetch":
return NewFetch(conf)
case "send":
return NewSend(conf)
case "today":
return NewToday(conf)
case "tomorrow":

36
cmd/cli/command/send.go Normal file
View File

@ -0,0 +1,36 @@
package command
import (
"fmt"
"git.ewintr.nl/gte/cmd/cli/format"
"git.ewintr.nl/gte/internal/configuration"
"git.ewintr.nl/gte/internal/process"
"git.ewintr.nl/gte/internal/storage"
"git.ewintr.nl/gte/pkg/msend"
)
type Send struct {
sender *process.Send
}
func NewSend(conf *configuration.Configuration) (*Send, error) {
local, err := storage.NewSqlite(conf.Sqlite())
if err != nil {
return &Send{}, err
}
disp := storage.NewDispatcher(msend.NewSSLSMTP(conf.SMTP()))
return &Send{
sender: process.NewSend(local, disp),
}, nil
}
func (s *Send) Do() string {
count, err := s.sender.Process()
if err != nil {
return format.FormatError(err)
}
return fmt.Sprintf("sent %d tasks\n", count)
}

View File

@ -25,12 +25,13 @@ func NewSend(local storage.LocalRepository, disp *storage.Dispatcher) *Send {
}
}
func (s *Send) Process() error {
func (s *Send) Process() (int, error) {
tasks, err := s.local.FindAll()
if err != nil {
return fmt.Errorf("%w: %v", ErrSendTasks, err)
return 0, fmt.Errorf("%w: %v", ErrSendTasks, err)
}
var count int
for _, t := range tasks {
if t.LocalStatus != task.STATUS_UPDATED {
continue
@ -38,12 +39,14 @@ func (s *Send) Process() error {
t.ApplyUpdate()
if err := s.disp.Dispatch(&t.Task); err != nil {
return fmt.Errorf("%w: %v", ErrSendTasks, err)
return 0, fmt.Errorf("%w: %v", ErrSendTasks, err)
}
if err := s.local.MarkDispatched(t.LocalId); err != nil {
return fmt.Errorf("%w: %v", ErrSendTasks, err)
return 0, fmt.Errorf("%w: %v", ErrSendTasks, err)
}
count++
}
return nil
return count, nil
}

View File

@ -35,7 +35,9 @@ func TestSend(t *testing.T) {
out := msend.NewMemory()
disp := storage.NewDispatcher(out)
send := process.NewSend(local, disp)
test.OK(t, send.Process())
res, err := send.Process()
test.OK(t, err)
test.Equals(t, 0, res)
test.Assert(t, len(out.Messages) == 0, "amount of messages was not 0")
})
@ -53,7 +55,9 @@ func TestSend(t *testing.T) {
out := msend.NewMemory()
disp := storage.NewDispatcher(out)
send := process.NewSend(local, disp)
test.OK(t, send.Process())
res, err := send.Process()
test.OK(t, err)
test.Equals(t, 1, res)
test.Assert(t, len(out.Messages) == 1, "amount of messages was not 1")
expSubject := "project1 - updated"
test.Equals(t, expSubject, out.Messages[0].Subject)