@@ -1771,6 +1771,106 @@ describe('[Channels]', () => {
17711771 } )
17721772 . end ( done ) ;
17731773 } ) ;
1774+
1775+ describe ( 'inclusive parameter' , ( ) => {
1776+ let testChannel : IRoom ;
1777+ let oldestMessage : IMessage ;
1778+ let middleMessage : IMessage ;
1779+ let latestMessage : IMessage ;
1780+
1781+ before ( async ( ) => {
1782+ const channelRes = await request
1783+ . post ( api ( 'channels.create' ) )
1784+ . set ( credentials )
1785+ . send ( { name : `inclusive-test-channel-${ Date . now ( ) } ` } ) ;
1786+ testChannel = channelRes . body . channel ;
1787+
1788+ // Send messages with small delays to ensure distinct timestamps
1789+ const msg1 = await sendMessage ( { message : { rid : testChannel . _id , msg : 'oldest message' } } ) ;
1790+ oldestMessage = msg1 . body . message ;
1791+
1792+ // Small delay to ensure timestamps are different
1793+ await new Promise ( ( resolve ) => setTimeout ( resolve , 50 ) ) ;
1794+
1795+ const msg2 = await sendMessage ( { message : { rid : testChannel . _id , msg : 'middle message' } } ) ;
1796+ middleMessage = msg2 . body . message ;
1797+
1798+ await new Promise ( ( resolve ) => setTimeout ( resolve , 50 ) ) ;
1799+
1800+ const msg3 = await sendMessage ( { message : { rid : testChannel . _id , msg : 'latest message' } } ) ;
1801+ latestMessage = msg3 . body . message ;
1802+ } ) ;
1803+
1804+ after ( async ( ) => {
1805+ if ( testChannel ?. _id ) {
1806+ await deleteRoom ( { type : 'c' , roomId : testChannel . _id } ) ;
1807+ }
1808+ } ) ;
1809+
1810+ it ( 'should include boundary messages when inclusive=true' , async ( ) => {
1811+ const res = await request
1812+ . get ( api ( 'channels.history' ) )
1813+ . set ( credentials )
1814+ . query ( {
1815+ roomId : testChannel . _id ,
1816+ oldest : oldestMessage . ts ,
1817+ latest : latestMessage . ts ,
1818+ inclusive : 'true' ,
1819+ } )
1820+ . expect ( 'Content-Type' , 'application/json' )
1821+ . expect ( 200 ) ;
1822+
1823+ expect ( res . body ) . to . have . property ( 'success' , true ) ;
1824+ expect ( res . body ) . to . have . property ( 'messages' ) . that . is . an ( 'array' ) ;
1825+
1826+ const messageIds = res . body . messages . map ( ( m : IMessage ) => m . _id ) ;
1827+ expect ( messageIds ) . to . include ( oldestMessage . _id , 'oldest message should be included' ) ;
1828+ expect ( messageIds ) . to . include ( latestMessage . _id , 'latest message should be included' ) ;
1829+ } ) ;
1830+
1831+ it ( 'should exclude boundary messages when inclusive=false' , async ( ) => {
1832+ const res = await request
1833+ . get ( api ( 'channels.history' ) )
1834+ . set ( credentials )
1835+ . query ( {
1836+ roomId : testChannel . _id ,
1837+ oldest : oldestMessage . ts ,
1838+ latest : latestMessage . ts ,
1839+ inclusive : 'false' ,
1840+ } )
1841+ . expect ( 'Content-Type' , 'application/json' )
1842+ . expect ( 200 ) ;
1843+
1844+ expect ( res . body ) . to . have . property ( 'success' , true ) ;
1845+ expect ( res . body ) . to . have . property ( 'messages' ) . that . is . an ( 'array' ) ;
1846+
1847+ const messageIds = res . body . messages . map ( ( m : IMessage ) => m . _id ) ;
1848+ expect ( messageIds ) . to . not . include ( oldestMessage . _id , 'oldest message should be excluded' ) ;
1849+ expect ( messageIds ) . to . not . include ( latestMessage . _id , 'latest message should be excluded' ) ;
1850+ // Middle message should still be included if it exists in the range
1851+ expect ( messageIds ) . to . include ( middleMessage . _id , 'middle message should be included' ) ;
1852+ } ) ;
1853+
1854+ it ( 'should exclude boundary messages by default (no inclusive param)' , async ( ) => {
1855+ const res = await request
1856+ . get ( api ( 'channels.history' ) )
1857+ . set ( credentials )
1858+ . query ( {
1859+ roomId : testChannel . _id ,
1860+ oldest : oldestMessage . ts ,
1861+ latest : latestMessage . ts ,
1862+ } )
1863+ . expect ( 'Content-Type' , 'application/json' )
1864+ . expect ( 200 ) ;
1865+
1866+ expect ( res . body ) . to . have . property ( 'success' , true ) ;
1867+ expect ( res . body ) . to . have . property ( 'messages' ) . that . is . an ( 'array' ) ;
1868+
1869+ const messageIds = res . body . messages . map ( ( m : IMessage ) => m . _id ) ;
1870+ expect ( messageIds ) . to . not . include ( oldestMessage . _id , 'oldest message should be excluded by default' ) ;
1871+ expect ( messageIds ) . to . not . include ( latestMessage . _id , 'latest message should be excluded by default' ) ;
1872+ } ) ;
1873+ } ) ;
17741874 } ) ;
17751875
17761876 describe ( '/channels.members' , ( ) => {
0 commit comments