5
5
"fmt"
6
6
"testing"
7
7
8
+ "github.com/slack-go/slack"
8
9
"github.com/stretchr/testify/assert"
9
10
)
10
11
@@ -15,9 +16,9 @@ func TestAssistantThreadStartedEvent(t *testing.T) {
15
16
"type": "assistant_thread_started",
16
17
"assistant_thread": {
17
18
"user_id": "U123ABC456",
18
- "context": {
19
- "channel_id": "C123ABC456",
20
- "team_id": "T07XY8FPJ5C",
19
+ "context": {
20
+ "channel_id": "C123ABC456",
21
+ "team_id": "T07XY8FPJ5C",
21
22
"enterprise_id": "E480293PS82"
22
23
},
23
24
"channel_id": "D123ABC456",
@@ -42,9 +43,9 @@ func TestAssistantThreadContextChangedEvent(t *testing.T) {
42
43
"type": "assistant_thread_context_changed",
43
44
"assistant_thread": {
44
45
"user_id": "U123ABC456",
45
- "context": {
46
- "channel_id": "C123ABC456",
47
- "team_id": "T07XY8FPJ5C",
46
+ "context": {
47
+ "channel_id": "C123ABC456",
48
+ "team_id": "T07XY8FPJ5C",
48
49
"enterprise_id": "E480293PS82"
49
50
},
50
51
"channel_id": "D123ABC456",
@@ -725,10 +726,10 @@ func TestMessageMetadataPosted(t *testing.T) {
725
726
{
726
727
"type":"message_metadata_posted",
727
728
"app_id":"APPXXX",
728
- "bot_id":"BOTXXX",
729
- "user_id":"USERXXX",
730
- "team_id":"TEAMXXX",
731
- "channel_id":"CHANNELXXX",
729
+ "bot_id":"BOTXXX",
730
+ "user_id":"USERXXX",
731
+ "team_id":"TEAMXXX",
732
+ "channel_id":"CHANNELXXX",
732
733
"metadata":{
733
734
"event_type":"type",
734
735
"event_payload":{"key": "value"}
@@ -781,16 +782,16 @@ func TestMessageMetadataUpdated(t *testing.T) {
781
782
rawE := []byte (`
782
783
{
783
784
"type":"message_metadata_updated",
784
- "channel_id":"CHANNELXXX",
785
+ "channel_id":"CHANNELXXX",
785
786
"event_ts":"1660398079.756349",
786
787
"previous_metadata":{
787
788
"event_type":"type1",
788
789
"event_payload":{"key1": "value1"}
789
790
},
790
791
"app_id":"APPXXX",
791
- "bot_id":"BOTXXX",
792
- "user_id":"USERXXX",
793
- "team_id":"TEAMXXX",
792
+ "bot_id":"BOTXXX",
793
+ "user_id":"USERXXX",
794
+ "team_id":"TEAMXXX",
794
795
"message_ts":"1660398079.756349",
795
796
"metadata":{
796
797
"event_type":"type2",
@@ -849,16 +850,16 @@ func TestMessageMetadataDeleted(t *testing.T) {
849
850
rawE := []byte (`
850
851
{
851
852
"type":"message_metadata_deleted",
852
- "channel_id":"CHANNELXXX",
853
+ "channel_id":"CHANNELXXX",
853
854
"event_ts":"1660398079.756349",
854
855
"previous_metadata":{
855
856
"event_type":"type",
856
857
"event_payload":{"key": "value"}
857
858
},
858
859
"app_id":"APPXXX",
859
- "bot_id":"BOTXXX",
860
- "user_id":"USERXXX",
861
- "team_id":"TEAMXXX",
860
+ "bot_id":"BOTXXX",
861
+ "user_id":"USERXXX",
862
+ "team_id":"TEAMXXX",
862
863
"message_ts":"1660398079.756349",
863
864
"deleted_ts":"1660398079.756349"
864
865
}
@@ -2771,3 +2772,184 @@ func TestSharedChannelInviteRequested_UnmarshalJSON(t *testing.T) {
2771
2772
t .Errorf ("Expected second team to have name 'another_enterprise', got '%v'" , event .TeamsInChannel )
2772
2773
}
2773
2774
}
2775
+
2776
+ func TestAppHomeOpenedEvent_WithView (t * testing.T ) {
2777
+ eventJSON := []byte (`{
2778
+ "type": "app_home_opened",
2779
+ "user": "U12345678",
2780
+ "channel": "D12345678",
2781
+ "tab": "home",
2782
+ "event_ts": "1747319568.267214",
2783
+ "view": {
2784
+ "id": "V12345678",
2785
+ "team_id": "T12345678",
2786
+ "type": "home",
2787
+ "blocks": [],
2788
+ "private_metadata": "",
2789
+ "callback_id": "",
2790
+ "state": {
2791
+ "values": {}
2792
+ },
2793
+ "hash": "1234567890.abcdef",
2794
+ "title": {
2795
+ "type": "plain_text",
2796
+ "text": "App Home"
2797
+ },
2798
+ "clear_on_close": false,
2799
+ "notify_on_close": false,
2800
+ "close": null,
2801
+ "submit": null,
2802
+ "previous_view_id": "",
2803
+ "root_view_id": "V12345678",
2804
+ "app_id": "A12345678",
2805
+ "external_id": "",
2806
+ "app_installed_team_id": "T12345678",
2807
+ "bot_id": "B12345678"
2808
+ }
2809
+ }` )
2810
+
2811
+ var event AppHomeOpenedEvent
2812
+ err := json .Unmarshal (eventJSON , & event )
2813
+
2814
+ assert .NoError (t , err )
2815
+ assert .Equal (t , "app_home_opened" , event .Type )
2816
+ assert .Equal (t , "U12345678" , event .User )
2817
+ assert .Equal (t , "D12345678" , event .Channel )
2818
+ assert .Equal (t , "home" , event .Tab )
2819
+ assert .Equal (t , "1747319568.267214" , event .EventTimeStamp )
2820
+ assert .NotNil (t , event .View )
2821
+ assert .Equal (t , "V12345678" , event .View .ID )
2822
+ assert .Equal (t , "T12345678" , event .View .TeamID )
2823
+ assert .Equal (t , slack .ViewType ("home" ), event .View .Type )
2824
+ }
2825
+
2826
+ func TestAppHomeOpenedEvent_WithoutView (t * testing.T ) {
2827
+ eventJSON := []byte (`{
2828
+ "type": "app_home_opened",
2829
+ "user": "U12345678",
2830
+ "channel": "D12345678",
2831
+ "tab": "home",
2832
+ "event_ts": "1747319568.267214"
2833
+ }` )
2834
+
2835
+ var event AppHomeOpenedEvent
2836
+ err := json .Unmarshal (eventJSON , & event )
2837
+
2838
+ assert .NoError (t , err )
2839
+ assert .Equal (t , "app_home_opened" , event .Type )
2840
+ assert .Equal (t , "U12345678" , event .User )
2841
+ assert .Equal (t , "D12345678" , event .Channel )
2842
+ assert .Equal (t , "home" , event .Tab )
2843
+ assert .Equal (t , "1747319568.267214" , event .EventTimeStamp )
2844
+ assert .Nil (t , event .View )
2845
+ }
2846
+
2847
+ func TestAppHomeOpenedEvent_FullEventParsing_WithView (t * testing.T ) {
2848
+ fullEventJSON := []byte (`{
2849
+ "token": "verification-token",
2850
+ "team_id": "T12345678",
2851
+ "api_app_id": "A12345678",
2852
+ "event": {
2853
+ "type": "app_home_opened",
2854
+ "user": "U12345678",
2855
+ "channel": "D12345678",
2856
+ "tab": "home",
2857
+ "event_ts": "1747319568.267214",
2858
+ "view": {
2859
+ "id": "V12345678",
2860
+ "team_id": "T12345678",
2861
+ "type": "home",
2862
+ "blocks": [],
2863
+ "private_metadata": "",
2864
+ "callback_id": "",
2865
+ "state": {
2866
+ "values": {}
2867
+ },
2868
+ "hash": "1234567890.abcdef",
2869
+ "title": {
2870
+ "type": "plain_text",
2871
+ "text": "App Home"
2872
+ },
2873
+ "clear_on_close": false,
2874
+ "notify_on_close": false,
2875
+ "close": null,
2876
+ "submit": null,
2877
+ "previous_view_id": "",
2878
+ "root_view_id": "V12345678",
2879
+ "app_id": "A12345678",
2880
+ "external_id": "",
2881
+ "app_installed_team_id": "T12345678",
2882
+ "bot_id": "B12345678"
2883
+ }
2884
+ },
2885
+ "type": "event_callback",
2886
+ "event_id": "Ev12345678",
2887
+ "event_time": 1747319568,
2888
+ "authorizations": [{
2889
+ "enterprise_id": null,
2890
+ "team_id": "T12345678",
2891
+ "user_id": "U12345678",
2892
+ "is_bot": true,
2893
+ "is_enterprise_install": false
2894
+ }],
2895
+ "is_ext_shared_channel": false
2896
+ }` )
2897
+
2898
+ parsedEvent , err := ParseEvent (fullEventJSON , OptionNoVerifyToken ())
2899
+
2900
+ assert .NoError (t , err )
2901
+ assert .Equal (t , "T12345678" , parsedEvent .TeamID )
2902
+ assert .Equal (t , "A12345678" , parsedEvent .APIAppID )
2903
+ assert .Equal (t , "app_home_opened" , parsedEvent .InnerEvent .Type )
2904
+ appHomeEvent , ok := parsedEvent .InnerEvent .Data .(* AppHomeOpenedEvent )
2905
+ assert .True (t , ok )
2906
+ assert .Equal (t , "app_home_opened" , appHomeEvent .Type )
2907
+ assert .Equal (t , "U12345678" , appHomeEvent .User )
2908
+ assert .Equal (t , "D12345678" , appHomeEvent .Channel )
2909
+ assert .Equal (t , "home" , appHomeEvent .Tab )
2910
+ assert .Equal (t , "1747319568.267214" , appHomeEvent .EventTimeStamp )
2911
+ assert .NotNil (t , appHomeEvent .View )
2912
+ assert .Equal (t , "V12345678" , appHomeEvent .View .ID )
2913
+ assert .Equal (t , "T12345678" , appHomeEvent .View .TeamID )
2914
+ }
2915
+
2916
+ func TestAppHomeOpenedEvent_FullEventParsing_WithoutView (t * testing.T ) {
2917
+ fullEventJSON := []byte (`{
2918
+ "token": "verification-token",
2919
+ "team_id": "T12345678",
2920
+ "api_app_id": "A12345678",
2921
+ "event": {
2922
+ "type": "app_home_opened",
2923
+ "user": "U12345678",
2924
+ "channel": "D12345678",
2925
+ "tab": "home",
2926
+ "event_ts": "1747319568.267214"
2927
+ },
2928
+ "type": "event_callback",
2929
+ "event_id": "Ev12345678",
2930
+ "event_time": 1747319568,
2931
+ "authorizations": [{
2932
+ "enterprise_id": null,
2933
+ "team_id": "T12345678",
2934
+ "user_id": "U12345678",
2935
+ "is_bot": true,
2936
+ "is_enterprise_install": false
2937
+ }],
2938
+ "is_ext_shared_channel": false
2939
+ }` )
2940
+
2941
+ parsedEvent , err := ParseEvent (fullEventJSON , OptionNoVerifyToken ())
2942
+
2943
+ assert .NoError (t , err )
2944
+ assert .Equal (t , "T12345678" , parsedEvent .TeamID )
2945
+ assert .Equal (t , "A12345678" , parsedEvent .APIAppID )
2946
+ assert .Equal (t , "app_home_opened" , parsedEvent .InnerEvent .Type )
2947
+ appHomeEvent , ok := parsedEvent .InnerEvent .Data .(* AppHomeOpenedEvent )
2948
+ assert .True (t , ok )
2949
+ assert .Equal (t , "app_home_opened" , appHomeEvent .Type )
2950
+ assert .Equal (t , "U12345678" , appHomeEvent .User )
2951
+ assert .Equal (t , "D12345678" , appHomeEvent .Channel )
2952
+ assert .Equal (t , "home" , appHomeEvent .Tab )
2953
+ assert .Equal (t , "1747319568.267214" , appHomeEvent .EventTimeStamp )
2954
+ assert .Nil (t , appHomeEvent .View )
2955
+ }
0 commit comments