@@ -1704,8 +1704,9 @@ describe('featureflags', () => {
17041704 } )
17051705 } )
17061706
1707- describe ( 'Feature Flag Request ID' , ( ) => {
1707+ describe ( 'Feature Flag Request ID and Evaluated At ' , ( ) => {
17081708 const TEST_REQUEST_ID = 'test-request-id-123'
1709+ const TEST_EVALUATED_AT = 1234567890
17091710
17101711 it ( 'saves requestId from /flags response' , ( ) => {
17111712 featureFlags . receivedFeatureFlags ( {
@@ -1717,6 +1718,16 @@ describe('featureflags', () => {
17171718 expect ( instance . get_property ( '$feature_flag_request_id' ) ) . toEqual ( TEST_REQUEST_ID )
17181719 } )
17191720
1721+ it ( 'saves evaluatedAt from /flags response' , ( ) => {
1722+ featureFlags . receivedFeatureFlags ( {
1723+ featureFlags : { 'test-flag' : true } ,
1724+ featureFlagPayloads : { } ,
1725+ evaluatedAt : TEST_EVALUATED_AT ,
1726+ } )
1727+
1728+ expect ( instance . get_property ( '$feature_flag_evaluated_at' ) ) . toEqual ( TEST_EVALUATED_AT )
1729+ } )
1730+
17201731 it ( 'includes requestId in feature flag called event' , ( ) => {
17211732 // Setup flags with requestId
17221733 featureFlags . receivedFeatureFlags ( {
@@ -1740,12 +1751,36 @@ describe('featureflags', () => {
17401751 )
17411752 } )
17421753
1754+ it ( 'includes evaluatedAt in feature flag called event' , ( ) => {
1755+ // Setup flags with evaluatedAt
1756+ featureFlags . receivedFeatureFlags ( {
1757+ featureFlags : { 'test-flag' : true } ,
1758+ featureFlagPayloads : { } ,
1759+ evaluatedAt : TEST_EVALUATED_AT ,
1760+ } )
1761+ featureFlags . _hasLoadedFlags = true
1762+
1763+ // Test flag call
1764+ featureFlags . getFeatureFlag ( 'test-flag' )
1765+
1766+ // Verify capture call includes evaluatedAt
1767+ expect ( instance . capture ) . toHaveBeenCalledWith (
1768+ '$feature_flag_called' ,
1769+ expect . objectContaining ( {
1770+ $feature_flag : 'test-flag' ,
1771+ $feature_flag_response : true ,
1772+ $feature_flag_evaluated_at : TEST_EVALUATED_AT ,
1773+ } )
1774+ )
1775+ } )
1776+
17431777 it ( 'includes version in feature flag called event' , ( ) => {
1744- // Setup flags with requestId
1778+ // Setup flags with requestId and evaluatedAt
17451779 featureFlags . receivedFeatureFlags ( {
17461780 featureFlags : { 'test-flag' : true } ,
17471781 featureFlagPayloads : { } ,
17481782 requestId : TEST_REQUEST_ID ,
1783+ evaluatedAt : TEST_EVALUATED_AT ,
17491784 flags : {
17501785 'test-flag' : {
17511786 key : 'test-flag' ,
@@ -1769,13 +1804,14 @@ describe('featureflags', () => {
17691804 // Test flag call
17701805 featureFlags . getFeatureFlag ( 'test-flag' )
17711806
1772- // Verify capture call includes requestId
1807+ // Verify capture call includes requestId and evaluatedAt
17731808 expect ( instance . capture ) . toHaveBeenCalledWith (
17741809 '$feature_flag_called' ,
17751810 expect . objectContaining ( {
17761811 $feature_flag : 'test-flag' ,
17771812 $feature_flag_response : 'variant-1' ,
17781813 $feature_flag_request_id : TEST_REQUEST_ID ,
1814+ $feature_flag_evaluated_at : TEST_EVALUATED_AT ,
17791815 $feature_flag_version : 42 ,
17801816 $feature_flag_reason : 'Matched condition set 1' ,
17811817 $feature_flag_id : 23 ,
@@ -1814,6 +1850,38 @@ describe('featureflags', () => {
18141850 } )
18151851 )
18161852 } )
1853+
1854+ it ( 'updates evaluatedAt when new /flags response is received' , ( ) => {
1855+ // First /flags response
1856+ featureFlags . receivedFeatureFlags ( {
1857+ featureFlags : { 'test-flag' : true } ,
1858+ featureFlagPayloads : { } ,
1859+ evaluatedAt : TEST_EVALUATED_AT ,
1860+ } )
1861+
1862+ expect ( instance . get_property ( '$feature_flag_evaluated_at' ) ) . toEqual ( TEST_EVALUATED_AT )
1863+
1864+ // Second /flags response with new timestamp
1865+ const NEW_EVALUATED_AT = 9876543210
1866+ featureFlags . receivedFeatureFlags ( {
1867+ featureFlags : { 'test-flag' : true } ,
1868+ featureFlagPayloads : { } ,
1869+ evaluatedAt : NEW_EVALUATED_AT ,
1870+ } )
1871+
1872+ expect ( instance . get_property ( '$feature_flag_evaluated_at' ) ) . toEqual ( NEW_EVALUATED_AT )
1873+
1874+ // Verify new timestamp is used in events
1875+ featureFlags . _hasLoadedFlags = true
1876+ featureFlags . getFeatureFlag ( 'test-flag' )
1877+
1878+ expect ( instance . capture ) . toHaveBeenCalledWith (
1879+ '$feature_flag_called' ,
1880+ expect . objectContaining ( {
1881+ $feature_flag_evaluated_at : NEW_EVALUATED_AT ,
1882+ } )
1883+ )
1884+ } )
18171885 } )
18181886} )
18191887
0 commit comments