@@ -231,17 +231,20 @@ private struct BadHeartbeatAcivity: ActivityDefinition {
231231 }
232232}
233233
234- private struct ReadingHeartbeatAcivity : ActivityDefinition {
234+ struct ReadingHeartbeatActivity : ActivityDefinition {
235235 struct HeartbeatDetails : Codable , Hashable {
236236 var string : String
237237 var data : Data
238238 }
239239 typealias Input = Void
240- typealias Output = HeartbeatDetails
240+ typealias Output = HeartbeatDetails ?
241241
242- static let name : String ? = " ReadingHeartbeatAcivity "
242+ static let name : String ? = " ReadingHeartbeatActivity "
243243
244- func run( input: Void ) async throws -> HeartbeatDetails {
244+ func run( input: Void ) async throws -> HeartbeatDetails ? {
245+ guard ActivityExecutionContext . current!. info. hasHeartbeatDetails else {
246+ return nil
247+ }
245248 let ( string, data) = try await ActivityExecutionContext . current!. info. heartbeatDetails (
246249 as: String . self,
247250 Data . self
@@ -748,9 +751,9 @@ struct ActivityWorkerTests {
748751 }
749752 }
750753
751- @Test
752- static func readingHeartbeat( ) async throws {
753- let test = ActivityWorkerTests ( activities: [ ReadingHeartbeatAcivity ( ) ] )
754+ @Test ( " Read Heartbeat Details " , arguments : [ true , false ] )
755+ static func readingHeartbeat( heartbeatDetailsAvailable : Bool ) async throws {
756+ let test = ActivityWorkerTests ( activities: [ ReadingHeartbeatActivity ( ) ] )
754757
755758 try await withThrowingTaskGroup ( of: Void . self) { group in
756759 group. addTask {
@@ -760,40 +763,47 @@ struct ActivityWorkerTests {
760763 test. bridgeWorker. activityTaskContinuation. yield (
761764 . with {
762765 $0. taskToken = Data ( [ 1 ] )
763- $0. start. activityType = " ReadingHeartbeatAcivity "
766+ $0. start. activityType = " ReadingHeartbeatActivity "
764767 $0. start. activityID = " ActivityID1 "
765768 $0. start. attempt = 1
766769 $0. start. workflowType = " WorkflowType "
767770 $0. start. workflowExecution = . with {
768771 $0. runID = " RunID "
769772 $0. workflowID = " WorkflowID1 "
770773 }
771- $0. start. heartbeatDetails = [
772- . with {
773- $0. data = Data ( #""Foo""# . utf8)
774- $0. metadata = [ " encoding " : Data ( " json/plain " . utf8) ]
775- } ,
776- . with {
777- $0. data = Data ( [ 1 , 2 , 3 ] )
778- $0. metadata = [ " encoding " : Data ( " binary/plain " . utf8) ]
779- } ,
780- ]
774+ if heartbeatDetailsAvailable {
775+ $0. start. heartbeatDetails = [
776+ . with {
777+ $0. data = Data ( #""Foo""# . utf8)
778+ $0. metadata = [ " encoding " : Data ( " json/plain " . utf8) ]
779+ } ,
780+ . with {
781+ $0. data = Data ( [ 1 , 2 , 3 ] )
782+ $0. metadata = [ " encoding " : Data ( " binary/plain " . utf8) ]
783+ } ,
784+ ]
785+ }
781786 }
782787 )
783788
784789 var activityTaskCompletionIterator = test. bridgeWorker. activityTaskCompletionStream. makeAsyncIterator ( )
785790 let completion = try await activityTaskCompletionIterator. next ( )
786791 #expect( completion? . taskToken == Data ( [ 1 ] ) )
787792 let jsonDecoder = JSONDecoder ( )
788- let expectedHeartbeatDetails = ReadingHeartbeatAcivity . HeartbeatDetails (
789- string: " Foo " ,
790- data: Data ( [ 1 , 2 , 3 ] )
791- )
792793 let heartbeatDetails = try jsonDecoder. decode (
793- ReadingHeartbeatAcivity . HeartbeatDetails. self,
794+ ( ReadingHeartbeatActivity . HeartbeatDetails? ) . self,
794795 from: completion!. result. completed. result. data
795796 )
796- #expect( heartbeatDetails == expectedHeartbeatDetails)
797+
798+ if heartbeatDetailsAvailable {
799+ let expectedHeartbeatDetails = ReadingHeartbeatActivity . HeartbeatDetails (
800+ string: " Foo " ,
801+ data: Data ( [ 1 , 2 , 3 ] )
802+ )
803+ #expect( heartbeatDetails == expectedHeartbeatDetails)
804+ } else {
805+ #expect( heartbeatDetails == nil )
806+ }
797807 group. cancelAll ( )
798808 }
799809 }
0 commit comments