Correctly report added tickets and add publish ticket command

This commit is contained in:
Miguel de la Cruz 2020-11-18 19:24:40 +01:00
parent 3aab0149b3
commit 8c77e1a33f
36 changed files with 8465 additions and 10 deletions

View file

@ -122,12 +122,14 @@ func (c *Campaign) PrintList(publishedOnly, printLinks bool) {
}
}
func (c *Campaign) AddTickets(tickets []*Ticket, fileOnly bool) {
func (c *Campaign) AddTickets(tickets []*Ticket, fileOnly bool) int {
c.Tickets = append(c.Tickets, tickets...)
c.RemoveDuplicateTickets(fileOnly)
removedTickets := c.RemoveDuplicateTickets(fileOnly)
return len(tickets) - removedTickets
}
func (c *Campaign) RemoveDuplicateTickets(fileOnly bool) {
func (c *Campaign) RemoveDuplicateTickets(fileOnly bool) int {
removedTickets := 0
datalessTickets := []*Ticket{}
ticketMap := map[string]*Ticket{}
for _, t := range c.Tickets {
@ -140,9 +142,18 @@ func (c *Campaign) RemoveDuplicateTickets(fileOnly bool) {
}
if fileOnly {
// a previous ticket for the filename already existed
if _, ok := ticketMap[filename]; ok {
removedTickets++
}
ticketMap[filename] = t
} else {
ticketMap[fmt.Sprintf("%s:%d", filename, lineNo)] = t
ticketKey := fmt.Sprintf("%s:%d", filename, lineNo)
// a previous ticket for the same key already existed
if _, ok := ticketMap[ticketKey]; ok {
removedTickets++
}
ticketMap[ticketKey] = t
}
}
@ -155,6 +166,7 @@ func (c *Campaign) RemoveDuplicateTickets(fileOnly bool) {
}
c.Tickets = cleanTickets
return removedTickets
}
func (c *Campaign) GetPublishedGithubTickets() []*Ticket {

84
model/campaign_test.go Normal file
View file

@ -0,0 +1,84 @@
package model
import (
"testing"
"github.com/stretchr/testify/require"
)
func createTicket(filename string, lineNo int) *Ticket {
return &Ticket{
Data: map[string]interface{}{
"filename": filename,
"lineNo": lineNo,
},
}
}
func TestAddTickets(t *testing.T) {
t.Run("Tickets should be added correctly with fileOnly disabled", func(t *testing.T) {
campaign := &Campaign{}
ticketsToAdd := []*Ticket{
createTicket("user.txt", 1),
createTicket("test.txt", 2),
createTicket("sample.txt", 3),
createTicket("user.txt", 4),
}
addedTickets := campaign.AddTickets(ticketsToAdd, false)
require.Equal(t, 4, addedTickets)
require.Len(t, campaign.Tickets, 4)
})
t.Run("Should account for already existing tickets with fileOnly disabled", func(t *testing.T) {
campaign := &Campaign{
Tickets: []*Ticket{
createTicket("user.txt", 1),
createTicket("test.txt", 2),
},
}
ticketsToAdd := []*Ticket{
createTicket("user.txt", 1),
createTicket("test.txt", 2),
createTicket("sample.txt", 3),
createTicket("user.txt", 4),
}
addedTickets := campaign.AddTickets(ticketsToAdd, false)
require.Equal(t, 2, addedTickets)
require.Len(t, campaign.Tickets, 4)
})
t.Run("Tickets should be added correctly with fileOnly enabled", func(t *testing.T) {
campaign := &Campaign{}
ticketsToAdd := []*Ticket{
createTicket("user.txt", 1),
createTicket("test.txt", 2),
createTicket("sample.txt", 3),
createTicket("user.txt", 4),
}
addedTickets := campaign.AddTickets(ticketsToAdd, true)
require.Equal(t, 3, addedTickets)
require.Len(t, campaign.Tickets, 3)
})
t.Run("Should account for already existing tickets with fileOnly enabled", func(t *testing.T) {
campaign := &Campaign{
Tickets: []*Ticket{
createTicket("user.txt", 1),
createTicket("test.txt", 2),
},
}
ticketsToAdd := []*Ticket{
createTicket("user.txt", 1),
createTicket("test.txt", 2),
createTicket("sample.txt", 3),
createTicket("user.txt", 4),
}
addedTickets := campaign.AddTickets(ticketsToAdd, true)
require.Equal(t, 1, addedTickets)
require.Len(t, campaign.Tickets, 3)
})
}