Skip to content
This repository was archived by the owner on Nov 27, 2018. It is now read-only.

Commit f2e4b85

Browse files
author
Sergey Kibish
committed
Delete webhook on failed request
1 parent 0d81ec2 commit f2e4b85

File tree

6 files changed

+49
-4
lines changed

6 files changed

+49
-4
lines changed

pkg/api/api_test.go

+4
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ type mockFirebase struct {
1616
set func(path string, v interface{}) (err error)
1717
get func(path string) (result json.RawMessage, err error)
1818
filterEqual func(path, field string, value interface{}) (result json.RawMessage, err error)
19+
delete func(path string) (err error)
1920
}
2021

2122
func (m mockFirebase) Set(path string, v interface{}) (err error) {
@@ -27,6 +28,9 @@ func (m mockFirebase) Get(path string) (result json.RawMessage, err error) {
2728
func (m mockFirebase) FilterEqual(path, field string, value interface{}) (result json.RawMessage, err error) {
2829
return m.filterEqual(path, field, value)
2930
}
31+
func (m mockFirebase) Delete(path string) (err error) {
32+
return m.delete(path)
33+
}
3034

3135
type mockSlack struct {
3236
oAuthAccess func(code string) (r *slack.OAuthAccessResponse, err error)

pkg/firebase/firebase.go

+13
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ type IFirebase interface {
1919
Set(path string, v interface{}) (err error)
2020
Get(path string) (result json.RawMessage, err error)
2121
FilterEqual(path, field string, value interface{}) (result json.RawMessage, err error)
22+
Delete(path string) (err error)
2223
}
2324

2425
// New return new instance of the Firebase
@@ -65,6 +66,18 @@ func (f *Firebase) Get(path string) (result json.RawMessage, err error) {
6566
return
6667
}
6768

69+
// Delete deletes record from the database
70+
func (f *Firebase) Delete(path string) (err error) {
71+
ref, err := f.realFirebase.Ref(path)
72+
if err != nil {
73+
return
74+
}
75+
76+
err = ref.Remove()
77+
78+
return
79+
}
80+
6881
// FilterEqual filter records with field equal to specific value
6982
func (f *Firebase) FilterEqual(path, field string, value interface{}) (result json.RawMessage, err error) {
7083
ref, err := f.realFirebase.Ref(path)

pkg/scheduler/scheduler.go

+6-4
Original file line numberDiff line numberDiff line change
@@ -92,15 +92,17 @@ func (s *Scheduler) publish() (err error) {
9292
break
9393
}
9494

95-
// send trash to all published workspaces
95+
// send trash to all subscribed workspaces
9696
for _, v := range workspaces {
97-
go func(wh string) {
97+
go func(wd storage.WorkspaceData) {
9898
json := []byte(fmt.Sprintf("{\"text\":%q}", trash))
99-
_, err := http.Post(wh, "application/json", bytes.NewBuffer(json))
99+
_, err := http.Post(wd.WebhookURL, "application/json", bytes.NewBuffer(json))
100100
if err != nil {
101+
log.Printf("Deleting workspace \"%s:%s\" because failed to POST", wd.ChannelID, wd.ID)
102+
s.sg.Workspace.Delete(wd)
101103
return
102104
}
103-
}(v.WebhookURL)
105+
}(v)
104106
}
105107

106108
return

pkg/storage/storage_test.go

+5
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ type mockFirebase struct {
99
set func(path string, v interface{}) (err error)
1010
get func(path string) (result json.RawMessage, err error)
1111
filterEqual func(path, field string, value interface{}) (result json.RawMessage, err error)
12+
delete func(path string) (err error)
1213
}
1314

1415
func (m mockFirebase) Set(path string, v interface{}) (err error) {
@@ -22,6 +23,10 @@ func (m mockFirebase) FilterEqual(path, field string, value interface{}) (result
2223
return m.filterEqual(path, field, value)
2324
}
2425

26+
func (m mockFirebase) Delete(path string) (err error) {
27+
return m.delete(path)
28+
}
29+
2530
func TestNew(t *testing.T) {
2631
fm := &mockFirebase{}
2732

pkg/storage/workspace.go

+8
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,11 @@ func (w *Workspace) GetAll() (finResult map[string]WorkspaceData, err error) {
4040

4141
return
4242
}
43+
44+
// Delete deletes workspace data
45+
func (w *Workspace) Delete(wd WorkspaceData) (err error) {
46+
refKey := fmt.Sprintf("%s/%s:%s", workspacePath, wd.ID, wd.ChannelID)
47+
err = w.firebase.Delete(refKey)
48+
49+
return
50+
}

pkg/storage/workspace_test.go

+13
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,16 @@ func TestWorkspaceGetAllErr(t *testing.T) {
6565
t.Error("Should be error, but everything is OK")
6666
}
6767
}
68+
69+
func TestWorkspaceDelete(t *testing.T) {
70+
fm := &mockFirebase{}
71+
fm.delete = func(path string) (err error) {
72+
return nil
73+
}
74+
75+
wp := Workspace{firebase: fm}
76+
err := wp.Delete(WorkspaceData{ChannelID: "123", ID: "321", WebhookURL: "http://a/b/c"})
77+
if err != nil {
78+
t.Errorf("Error was not expected: %v", err)
79+
}
80+
}

0 commit comments

Comments
 (0)