@@ -827,4 +827,91 @@ class InstanaTests: InstanaTestCase {
827827 Instana . current = nil
828828 AssertFalse ( Instana . collectionEnabled)
829829 }
830+
831+ func test_setViewMetaCPInternal_called_negative( ) {
832+ // Given
833+ let session = InstanaSession . mock ( configuration: . mock( ) )
834+
835+ var viewChangeBeaconCount = 0
836+ var capturedViewInternalMetaMap : [ String : String ] ? = nil
837+ let reporter = MockReporter {
838+ if let viewChange = $0 as? ViewChange {
839+ capturedViewInternalMetaMap = viewChange. viewInternalCPMetaMap
840+ viewChangeBeaconCount += 1
841+ }
842+ }
843+ Instana . current = Instana ( session: session, monitors: Monitors ( session, reporter: reporter) )
844+
845+ let testViewInternalMetaMap = [ " key1 " : " value1 " , " key2 " : " value2 " ]
846+ // When
847+ Instana . setViewMetaCPInternal ( name: " ScreenName " , viewInternalCPMetaMap: testViewInternalMetaMap)
848+
849+ Instana . current? . setViewInternal ( name: nil ) // nil view name should not trigger ViewChange beacon
850+ Thread . sleep ( forTimeInterval: 1 )
851+
852+ // Then
853+ AssertEqualAndNotNil ( viewChangeBeaconCount, 0 )
854+ AssertEqualAndNotNil ( capturedViewInternalMetaMap, nil )
855+ }
856+
857+ func test_setViewMetaCPInternal_called_positive( ) {
858+ // Given
859+ let session = InstanaSession . mock ( configuration: . mock( ) )
860+
861+ var viewChangeBeaconCount = 0
862+ var capturedViewInternalMetaMap : [ String : String ] ? = nil
863+ let reporter = MockReporter {
864+ if let viewChange = $0 as? ViewChange {
865+ capturedViewInternalMetaMap = viewChange. viewInternalCPMetaMap
866+ viewChangeBeaconCount += 1
867+ }
868+ }
869+ Instana . current = Instana ( session: session, monitors: Monitors ( session, reporter: reporter) )
870+
871+ let testViewInternalMetaMap = [ " settings.route.name " : " value1 " , " widget.name " : " value2 " ]
872+
873+
874+ // When
875+ Instana . setViewMetaCPInternal ( name: " ScreenName " , viewInternalCPMetaMap: testViewInternalMetaMap)
876+
877+ Instana . current? . setViewInternal ( name: nil ) // nil view name should not trigger ViewChange beacon
878+ Thread . sleep ( forTimeInterval: 1 )
879+
880+ // Then
881+ AssertEqualAndNotNil ( viewChangeBeaconCount, 1 )
882+ AssertEqualAndNotNil ( capturedViewInternalMetaMap, testViewInternalMetaMap)
883+ }
884+
885+ func test_setViewMetaCPInternal_called_with_max_value_length( ) {
886+ // Given
887+ let session = InstanaSession . mock ( configuration: . mock( ) )
888+
889+ var viewChangeBeaconCount = 0
890+ var capturedViewInternalMetaMap : [ String : String ] ? = nil
891+ let reporter = MockReporter {
892+ if let viewChange = $0 as? ViewChange {
893+ capturedViewInternalMetaMap = viewChange. viewInternalCPMetaMap
894+ viewChangeBeaconCount += 1
895+ }
896+ }
897+ Instana . current = Instana ( session: session, monitors: Monitors ( session, reporter: reporter) )
898+ var randomString = " "
899+ for _ in 0 ..< InstanaProperties . viewMaxLength+ 3 {
900+ let randomCharacter = Character ( UnicodeScalar ( UInt32 . random ( in: 65 ... 90 ) ) ?? " A " ) // A-Z
901+ randomString. append ( randomCharacter)
902+ }
903+
904+ let testViewInternalMetaMap = [ " settings.route.name " : randomString, " widget.name " : " value2 " ]
905+
906+
907+ // When
908+ Instana . setViewMetaCPInternal ( name: " ScreenName " , viewInternalCPMetaMap: testViewInternalMetaMap)
909+
910+ Instana . current? . setViewInternal ( name: nil ) // nil view name should not trigger ViewChange beacon
911+ Thread . sleep ( forTimeInterval: 1 )
912+
913+ // Then
914+ AssertEqualAndNotNil ( viewChangeBeaconCount, 1 )
915+ AssertEqualAndNotNil ( capturedViewInternalMetaMap ? [ " settings.route.name " ] ? . count, InstanaProperties . viewMaxLength)
916+ }
830917}
0 commit comments