|
2 | 2 | import os |
3 | 3 | import time |
4 | 4 | import unittest |
| 5 | +import json |
5 | 6 |
|
6 | 7 | from integration_tests.env_variable_names import SLACK_SDK_TEST_BOT_TOKEN |
7 | | -from slack_sdk.models.metadata import Metadata |
| 8 | +from slack_sdk.models.metadata import ( |
| 9 | + Metadata, |
| 10 | + EventAndEntityMetadata, |
| 11 | + EntityMetadata, |
| 12 | + ExternalRef, |
| 13 | + EntityPayload, |
| 14 | + EntityAttributes, |
| 15 | + EntityTitle, |
| 16 | + TaskEntityFields, |
| 17 | + EntityStringField, |
| 18 | + EntityTitle, |
| 19 | + EntityAttributes, |
| 20 | + EntityFullSizePreview, |
| 21 | + TaskEntityFields, |
| 22 | + EntityTypedField, |
| 23 | + EntityStringField, |
| 24 | + EntityTimestampField, |
| 25 | + EntityEditSupport, |
| 26 | + EntityEditTextConfig, |
| 27 | + EntityCustomField, |
| 28 | + EntityUserIDField, |
| 29 | + ExternalRef, |
| 30 | +) |
8 | 31 | from slack_sdk.web import WebClient |
9 | 32 |
|
10 | 33 |
|
@@ -125,3 +148,97 @@ def test_publishing_message_metadata_using_models(self): |
125 | 148 | ) |
126 | 149 | self.assertIsNone(scheduled.get("error")) |
127 | 150 | self.assertIsNotNone(scheduled.get("message").get("metadata")) |
| 151 | + |
| 152 | + def test_publishing_entity_metadata(self): |
| 153 | + client: WebClient = WebClient(token=self.bot_token) |
| 154 | + new_message = client.chat_postMessage( |
| 155 | + channel="C014KLZN9M0", |
| 156 | + text="Message with entity metadata", |
| 157 | + metadata={ |
| 158 | + "entities": [ |
| 159 | + { |
| 160 | + "entity_type": "slack#/entities/task", |
| 161 | + "url": "https://abc.com/123", |
| 162 | + "external_ref": {"id": "123"}, |
| 163 | + "entity_payload": { |
| 164 | + "attributes": {"title": {"text": "My task"}, "product_name": "We reference only"}, |
| 165 | + "fields": { |
| 166 | + "due_date": {"value": "2026-06-06", "type": "slack#/types/date", "edit": {"enabled": True}}, |
| 167 | + "created_by": {"type": "slack#/types/user", "user": {"user_id": "U014KLZE350"}}, |
| 168 | + "date_created": {"value": 1760629278}, |
| 169 | + }, |
| 170 | + "custom_fields": [ |
| 171 | + { |
| 172 | + "label": "img", |
| 173 | + "key": "img", |
| 174 | + "type": "slack#/types/image", |
| 175 | + "image_url": "https://s3-media2.fl.yelpcdn.com/bphoto/korel-1YjNtFtJlMTaC26A/o.jpg", |
| 176 | + } |
| 177 | + ], |
| 178 | + }, |
| 179 | + } |
| 180 | + ] |
| 181 | + }, |
| 182 | + ) |
| 183 | + |
| 184 | + self.assertIsNone(new_message.get("error")) |
| 185 | + self.assertIsNone(new_message.get("warning")) |
| 186 | + |
| 187 | + def test_publishing_entity_metadata_using_models(self): |
| 188 | + # Build the metadata |
| 189 | + |
| 190 | + title = EntityTitle(text="My title") |
| 191 | + full_size_preview = EntityFullSizePreview( |
| 192 | + is_supported=True, |
| 193 | + preview_url="https://s3-media3.fl.yelpcdn.com/bphoto/c7ed05m9lC2EmA3Aruue7A/o.jpg", |
| 194 | + mime_type="image/jpeg", |
| 195 | + ) |
| 196 | + attributes = EntityAttributes(title=title, product_name="My Product", full_size_preview=full_size_preview) |
| 197 | + description = EntityStringField( |
| 198 | + value="Description of the task.", |
| 199 | + long=True, |
| 200 | + edit=EntityEditSupport(enabled=True, text=EntityEditTextConfig(min_length=5, max_length=100)), |
| 201 | + ) |
| 202 | + due_date = EntityTypedField(value="2026-06-06", type="slack#/types/date", edit=EntityEditSupport(enabled=True)) |
| 203 | + created_by = EntityTypedField( |
| 204 | + type="slack#/types/user", |
| 205 | + user=EntityUserIDField(user_id="USLACKBOT"), |
| 206 | + ) |
| 207 | + date_created = EntityTimestampField(value=1762450663, type="slack#/types/timestamp") |
| 208 | + date_updated = EntityTimestampField(value=1762450663, type="slack#/types/timestamp") |
| 209 | + fields = TaskEntityFields( |
| 210 | + description=description, |
| 211 | + due_date=due_date, |
| 212 | + created_by=created_by, |
| 213 | + date_created=date_created, |
| 214 | + date_updated=date_updated, |
| 215 | + ) |
| 216 | + custom_fields = [] |
| 217 | + custom_fields.append( |
| 218 | + EntityCustomField( |
| 219 | + label="My Image", |
| 220 | + key="my-image", |
| 221 | + type="slack#/types/image", |
| 222 | + image_url="https://s3-media3.fl.yelpcdn.com/bphoto/c7ed05m9lC2EmA3Aruue7A/o.jpg", |
| 223 | + ) |
| 224 | + ) |
| 225 | + entity = EntityPayload(attributes=attributes, fields=fields, custom_fields=custom_fields) |
| 226 | + |
| 227 | + client: WebClient = WebClient(token=self.bot_token) |
| 228 | + new_message = client.chat_postMessage( |
| 229 | + channel="#random", |
| 230 | + text="Message with entity metadata", |
| 231 | + metadata=EventAndEntityMetadata( |
| 232 | + entities=[ |
| 233 | + EntityMetadata( |
| 234 | + entity_type="slack#/entities/task", |
| 235 | + external_ref=ExternalRef(id="abc123"), |
| 236 | + url="https://myappdomain.com", |
| 237 | + entity_payload=entity, |
| 238 | + ) |
| 239 | + ] |
| 240 | + ), |
| 241 | + ) |
| 242 | + |
| 243 | + self.assertIsNone(new_message.get("error")) |
| 244 | + self.assertIsNone(new_message.get("warning")) |
0 commit comments