From 3794b45453b39927582fa74ddb38a45ad0812c81 Mon Sep 17 00:00:00 2001 From: Oren Herman Date: Wed, 22 Jan 2025 09:56:14 +0200 Subject: [PATCH 1/4] add join message and fix test --- go.mod | 6 ++-- go.sum | 12 ++++---- service/rate.go | 55 ++++++++++++++++--------------------- testing/integration_test.go | 7 ++++- 4 files changed, 38 insertions(+), 42 deletions(-) diff --git a/go.mod b/go.mod index d87fc6f..1e5744d 100644 --- a/go.mod +++ b/go.mod @@ -19,7 +19,7 @@ require ( github.com/prometheus/common v0.10.0 github.com/slack-go/slack v0.14.0 github.com/stretchr/testify v1.7.0 - golang.org/x/net v0.33.0 + golang.org/x/net v0.29.0 ) require ( @@ -41,8 +41,8 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect github.com/sirupsen/logrus v1.8.1 // indirect go.uber.org/atomic v1.6.0 // indirect - golang.org/x/crypto v0.31.0 // indirect - golang.org/x/sys v0.28.0 // indirect + golang.org/x/crypto v0.27.0 // indirect + golang.org/x/sys v0.25.0 // indirect gopkg.in/alecthomas/kingpin.v2 v2.2.6 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 3e81f58..87635b8 100644 --- a/go.sum +++ b/go.sum @@ -958,8 +958,8 @@ golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= -golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= +golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A= +golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1062,8 +1062,8 @@ golang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211013171255-e13a2654a71e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= -golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= +golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= +golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= golang.org/x/oauth2 v0.0.0-20180227000427-d7d64896b5ff/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1186,8 +1186,8 @@ golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210818153620-00dd8d7831e7/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211013075003-97ac67df715c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= -golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= +golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/service/rate.go b/service/rate.go index d237a4b..19d8fe7 100644 --- a/service/rate.go +++ b/service/rate.go @@ -69,11 +69,27 @@ func (h *Service) HandleLinkMessage(req LinksRequest) (string, error) { return "", errWontJoin } - groupRate, err := h.getRateForGroup(req.Channel, groupID.ID, req.MessageID) - if err != nil { - if errors.Is(err, errNotInTime) { - return "", nil + shouldHandleOrder := h.shouldHandleOrder() + if !shouldHandleOrder { + _, err := h.informEvent(req.Channel, "It's too late for me... I won't track prices for this order :sleeping:", "", req.MessageID) + if err != nil { + return "", errWontJoin } + } + + order, err := h.joinGroupOrder(groupID.ID) + if err != nil { + _, _ = h.informEvent(req.Channel, "I had an error joining the order", "", req.MessageID) + return "", fmt.Errorf("join group order: %w", err) + } + h.currentlyWorkingOrders.Store(groupID, order) + venue, err := order.Venue() + if err == nil { + h.informEvent(req.Channel, fmt.Sprintf("Hi 👋, I've joined the order from [%s]", venue.Name), "", req.MessageID) + } + + groupRate, err := h.getRateForGroup(order, req.Channel, req.MessageID) + if err != nil { if strings.Contains(err.Error(), "order canceled") { _, _ = h.informEvent(req.Channel, fmt.Sprintf("Order for group ID %s was canceled", groupID.ID), "", req.MessageID) return "", nil @@ -87,13 +103,8 @@ func (h *Service) HandleLinkMessage(req LinksRequest) (string, error) { return "", nil } - order, _ := h.currentlyWorkingOrders.Load(groupID.ID) - if order == nil { - return "", fmt.Errorf("order %s not initialized in map", groupID.ID) - } - ratesMessage := h.buildRatesMessage(groupRate, groupID.ID) - order.(*groupOrder).detailsMessageId, err = h.informEvent(req.Channel, ratesMessage, MarkAsPaidReaction, req.MessageID) + order.detailsMessageId, err = h.informEvent(req.Channel, ratesMessage, MarkAsPaidReaction, req.MessageID) if err != nil { return "", fmt.Errorf("failed sending details message: %w", err) } @@ -105,7 +116,7 @@ func (h *Service) HandleLinkMessage(req LinksRequest) (string, error) { ctx, cancel := context.WithTimeout(context.Background(), h.cfg.OrderDoneTimeout) defer cancel() - if err = h.monitorDelivery(req.Channel, order.(*groupOrder), ctx, h.cfg.WaitBetweenStatusCheck, req.MessageID, ratesMessage); err != nil { + if err = h.monitorDelivery(req.Channel, order, ctx, h.cfg.WaitBetweenStatusCheck, req.MessageID, ratesMessage); err != nil { if strings.Contains(err.Error(), "context canceled while waiting") { _, _ = h.informEvent(req.Channel, "Timed out waiting for order to be done", "", req.MessageID) return "", nil @@ -239,23 +250,7 @@ func (h *Service) saveOrderAsync(order *groupOrder, groupRate GroupRate, receive } -func (h *Service) getRateForGroup(receiver, groupID, messageID string) (groupRate GroupRate, err error) { - shouldHandleOrder := h.shouldHandleOrder() - - if !shouldHandleOrder { - _, err := h.informEvent(receiver, "It's too late for me... I won't track prices for this order :sleeping:", "", messageID) - if err != nil { - return GroupRate{}, errWontJoin - } - } - - order, err := h.joinGroupOrder(groupID) - if err != nil { - _, _ = h.informEvent(receiver, "I had an error joining the order", "", messageID) - return GroupRate{}, fmt.Errorf("join group order: %w", err) - } - h.currentlyWorkingOrders.Store(groupID, order) - +func (h *Service) getRateForGroup(order *groupOrder, receiver, messageID string) (groupRate GroupRate, err error) { defer func() { go h.saveOrderAsync(order, groupRate, receiver) }() @@ -275,10 +270,6 @@ func (h *Service) getRateForGroup(receiver, groupID, messageID string) (groupRat } monitorCancel() - if !shouldHandleOrder { - return GroupRate{}, errNotInTime - } - details, err := order.Details() if err != nil { return GroupRate{}, fmt.Errorf("get group details for calculating rates: %w", err) diff --git a/testing/integration_test.go b/testing/integration_test.go index 08dab21..e128c05 100644 --- a/testing/integration_test.go +++ b/testing/integration_test.go @@ -693,6 +693,11 @@ func TestSlackPurchaseGroup(t *testing.T) { }) assert.NoError(t, err) + msg, err := WaitForOutboundSlackMessage(WaitForMessageTimeout, tdata.slackServer, + "Hi 👋, I've joined the order from [A Tasty Venue]", + MessageChannel, timestamp, ContainsMatch) + require.NoError(t, err) + // Adding relevant participants as users in Slack participantIDsMapping := make(map[string]string) for participantName, slackUser := range tc.participantsToAddToSlack { @@ -729,7 +734,7 @@ func TestSlackPurchaseGroup(t *testing.T) { // Validating the rates message rates, ratesMessage := buildRatesMessage(t, order, expectedDelivery, participantIDsMapping) - msg, err := WaitForOutboundSlackMessage(WaitForMessageTimeout, tdata.slackServer, + msg, err = WaitForOutboundSlackMessage(WaitForMessageTimeout, tdata.slackServer, fmt.Sprintf("Rates for Wolt order ID %s", orderShortID), MessageChannel, timestamp, ContainsMatch) require.NoError(t, err) From 93fdee5792a65ed8e082560a5ba758a45b10f450 Mon Sep 17 00:00:00 2001 From: Oren Herman Date: Wed, 22 Jan 2025 09:57:20 +0200 Subject: [PATCH 2/4] revert go mod --- go.mod | 6 +++--- go.sum | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 1e5744d..d87fc6f 100644 --- a/go.mod +++ b/go.mod @@ -19,7 +19,7 @@ require ( github.com/prometheus/common v0.10.0 github.com/slack-go/slack v0.14.0 github.com/stretchr/testify v1.7.0 - golang.org/x/net v0.29.0 + golang.org/x/net v0.33.0 ) require ( @@ -41,8 +41,8 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect github.com/sirupsen/logrus v1.8.1 // indirect go.uber.org/atomic v1.6.0 // indirect - golang.org/x/crypto v0.27.0 // indirect - golang.org/x/sys v0.25.0 // indirect + golang.org/x/crypto v0.31.0 // indirect + golang.org/x/sys v0.28.0 // indirect gopkg.in/alecthomas/kingpin.v2 v2.2.6 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 87635b8..3e81f58 100644 --- a/go.sum +++ b/go.sum @@ -958,8 +958,8 @@ golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A= -golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1062,8 +1062,8 @@ golang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211013171255-e13a2654a71e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= -golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= +golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= +golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= golang.org/x/oauth2 v0.0.0-20180227000427-d7d64896b5ff/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1186,8 +1186,8 @@ golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210818153620-00dd8d7831e7/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211013075003-97ac67df715c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= -golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= From a4fc259ed61f013cf9ac30e31f8e4d5264c3a574 Mon Sep 17 00:00:00 2001 From: Oren Herman Date: Wed, 22 Jan 2025 10:04:45 +0200 Subject: [PATCH 3/4] return --- service/rate.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/service/rate.go b/service/rate.go index 19d8fe7..8b49e9b 100644 --- a/service/rate.go +++ b/service/rate.go @@ -75,6 +75,8 @@ func (h *Service) HandleLinkMessage(req LinksRequest) (string, error) { if err != nil { return "", errWontJoin } + + return "", nil } order, err := h.joinGroupOrder(groupID.ID) From c3564315be6a05586f51f5aabac304ba92b08c33 Mon Sep 17 00:00:00 2001 From: Oren Herman Date: Wed, 22 Jan 2025 10:06:01 +0200 Subject: [PATCH 4/4] better error --- service/rate.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/rate.go b/service/rate.go index 8b49e9b..6ccdd79 100644 --- a/service/rate.go +++ b/service/rate.go @@ -76,7 +76,7 @@ func (h *Service) HandleLinkMessage(req LinksRequest) (string, error) { return "", errWontJoin } - return "", nil + return "", errNotInTime } order, err := h.joinGroupOrder(groupID.ID)