@@ -1523,5 +1523,324 @@ public void onCompletion(ContentTypesModel contentTypesModel, Error error) {
15231523 // Environment not in params if not in headers
15241524 assertFalse (params .has ("environment" ) && !stack .headers .containsKey ("environment" ));
15251525 }
1526+
1527+ // ========== LIVE PREVIEW QUERY TESTS ==========
1528+
1529+ @ Test
1530+ void testLivePreviewQueryWithDisabledLivePreview () {
1531+ Config config = new Config ();
1532+ config .setHost ("api.contentstack.io" );
1533+ config .enableLivePreview (false );
1534+ stack .setConfig (config );
1535+
1536+ Map <String , String > query = new HashMap <>();
1537+ query .put ("live_preview" , "hash123" );
1538+ query .put ("content_type_uid" , "blog" );
1539+ query .put ("entry_uid" , "entry123" );
1540+
1541+ // Should throw IllegalStateException when live preview is not enabled
1542+ assertThrows (IllegalStateException .class , () -> stack .livePreviewQuery (query ));
1543+ }
1544+
1545+ @ Test
1546+ void testLivePreviewQueryWithNullEntryUid () {
1547+ Config config = new Config ();
1548+ config .setHost ("api.contentstack.io" );
1549+ config .enableLivePreview (true );
1550+ config .setLivePreviewHost ("rest-preview.contentstack.com" );
1551+ config .setPreviewToken ("preview_token_123" );
1552+ stack .setConfig (config );
1553+ stack .headers .put ("api_key" , "test_api_key" );
1554+
1555+ Map <String , String > query = new HashMap <>();
1556+ query .put ("live_preview" , "hash123" );
1557+ query .put ("content_type_uid" , "blog" );
1558+ query .put ("entry_uid" , null ); // null entry_uid
1559+
1560+ // Should throw IllegalStateException due to /null/ in URL or IOException from network
1561+ assertThrows (Exception .class , () -> stack .livePreviewQuery (query ));
1562+ }
1563+
1564+ @ Test
1565+ void testLivePreviewQueryWithNullContentType () {
1566+ Config config = new Config ();
1567+ config .setHost ("api.contentstack.io" );
1568+ config .enableLivePreview (true );
1569+ config .setLivePreviewHost ("rest-preview.contentstack.com" );
1570+ config .setPreviewToken ("preview_token_123" ); // Add preview token
1571+ stack .setConfig (config );
1572+ stack .headers .put ("api_key" , "test_api_key" );
1573+
1574+ Map <String , String > query = new HashMap <>();
1575+ query .put ("live_preview" , "hash123" );
1576+ query .put ("content_type_uid" , null ); // null content_type
1577+ query .put ("entry_uid" , "entry123" );
1578+
1579+ // Should throw NullPointerException when trying to concat null content_type_uid
1580+ assertThrows (NullPointerException .class , () -> stack .livePreviewQuery (query ));
1581+ }
1582+
1583+ @ Test
1584+ void testLivePreviewQueryWithReleaseId () {
1585+ Config config = new Config ();
1586+ config .setHost ("api.contentstack.io" );
1587+ config .enableLivePreview (true );
1588+ config .setLivePreviewHost ("rest-preview.contentstack.com" );
1589+ config .setPreviewToken ("preview_token_123" );
1590+ stack .setConfig (config );
1591+ stack .headers .put ("api_key" , "test_api_key" );
1592+
1593+ Map <String , String > query = new HashMap <>();
1594+ query .put ("live_preview" , "hash123" );
1595+ query .put ("content_type_uid" , "blog" );
1596+ query .put ("entry_uid" , "entry123" );
1597+ query .put ("release_id" , "release_456" );
1598+
1599+ // This will attempt network call but we're testing the parameter setting
1600+ try {
1601+ stack .livePreviewQuery (query );
1602+ } catch (Exception e ) {
1603+ // Expected - network call will fail, but we can check that releaseId was set
1604+ assertEquals ("release_456" , config .releaseId );
1605+ }
1606+ }
1607+
1608+ @ Test
1609+ void testLivePreviewQueryWithoutReleaseId () {
1610+ Config config = new Config ();
1611+ config .setHost ("api.contentstack.io" );
1612+ config .enableLivePreview (true );
1613+ config .setLivePreviewHost ("rest-preview.contentstack.com" );
1614+ config .setPreviewToken ("preview_token_123" );
1615+ config .releaseId = "existing_release" ; // Set existing value
1616+ stack .setConfig (config );
1617+ stack .headers .put ("api_key" , "test_api_key" );
1618+
1619+ Map <String , String > query = new HashMap <>();
1620+ query .put ("live_preview" , "hash123" );
1621+ query .put ("content_type_uid" , "blog" );
1622+ query .put ("entry_uid" , "entry123" );
1623+ // No release_id in query
1624+
1625+ try {
1626+ stack .livePreviewQuery (query );
1627+ } catch (Exception e ) {
1628+ // Expected - network call will fail, but we can check that releaseId was set to null
1629+ assertNull (config .releaseId );
1630+ }
1631+ }
1632+
1633+ @ Test
1634+ void testLivePreviewQueryWithPreviewTimestamp () {
1635+ Config config = new Config ();
1636+ config .setHost ("api.contentstack.io" );
1637+ config .enableLivePreview (true );
1638+ config .setLivePreviewHost ("rest-preview.contentstack.com" );
1639+ config .setPreviewToken ("preview_token_123" );
1640+ stack .setConfig (config );
1641+ stack .headers .put ("api_key" , "test_api_key" );
1642+
1643+ Map <String , String > query = new HashMap <>();
1644+ query .put ("live_preview" , "hash123" );
1645+ query .put ("content_type_uid" , "blog" );
1646+ query .put ("entry_uid" , "entry123" );
1647+ query .put ("preview_timestamp" , "2024-01-01T00:00:00Z" );
1648+
1649+ try {
1650+ stack .livePreviewQuery (query );
1651+ } catch (Exception e ) {
1652+ // Expected - network call will fail, but we can check that previewTimestamp was set
1653+ assertEquals ("2024-01-01T00:00:00Z" , config .previewTimestamp );
1654+ }
1655+ }
1656+
1657+ @ Test
1658+ void testLivePreviewQueryWithoutPreviewTimestamp () {
1659+ Config config = new Config ();
1660+ config .setHost ("api.contentstack.io" );
1661+ config .enableLivePreview (true );
1662+ config .setLivePreviewHost ("rest-preview.contentstack.com" );
1663+ config .setPreviewToken ("preview_token_123" );
1664+ config .previewTimestamp = "existing_timestamp" ; // Set existing value
1665+ stack .setConfig (config );
1666+ stack .headers .put ("api_key" , "test_api_key" );
1667+
1668+ Map <String , String > query = new HashMap <>();
1669+ query .put ("live_preview" , "hash123" );
1670+ query .put ("content_type_uid" , "blog" );
1671+ query .put ("entry_uid" , "entry123" );
1672+ // No preview_timestamp in query
1673+
1674+ try {
1675+ stack .livePreviewQuery (query );
1676+ } catch (Exception e ) {
1677+ // Expected - network call will fail, but we can check that previewTimestamp was set to null
1678+ assertNull (config .previewTimestamp );
1679+ }
1680+ }
1681+
1682+ @ Test
1683+ void testLivePreviewQueryWithRestPreviewHostMissingToken () {
1684+ Config config = new Config ();
1685+ config .setHost ("api.contentstack.io" );
1686+ config .enableLivePreview (true );
1687+ config .setLivePreviewHost ("rest-preview.contentstack.com" );
1688+ // No preview token set
1689+ stack .setConfig (config );
1690+ stack .headers .put ("api_key" , "test_api_key" );
1691+
1692+ Map <String , String > query = new HashMap <>();
1693+ query .put ("live_preview" , "hash123" );
1694+ query .put ("content_type_uid" , "blog" );
1695+ query .put ("entry_uid" , "entry123" );
1696+
1697+ // Should throw IllegalAccessError when preview token is missing
1698+ assertThrows (IllegalAccessError .class , () -> stack .livePreviewQuery (query ));
1699+ }
1700+
1701+ @ Test
1702+ void testLivePreviewQueryWithRestPreviewHostAndToken () {
1703+ Config config = new Config ();
1704+ config .setHost ("api.contentstack.io" );
1705+ config .enableLivePreview (true );
1706+ config .setLivePreviewHost ("rest-preview.contentstack.com" );
1707+ config .setPreviewToken ("preview_token_123" );
1708+ stack .setConfig (config );
1709+ stack .headers .put ("api_key" , "test_api_key" );
1710+
1711+ Map <String , String > query = new HashMap <>();
1712+ query .put ("live_preview" , "hash123" );
1713+ query .put ("content_type_uid" , "blog" );
1714+ query .put ("entry_uid" , "entry123" );
1715+
1716+ // This will attempt network call and may throw exception or succeed depending on network
1717+ // Just verify the parameters are set correctly
1718+ try {
1719+ stack .livePreviewQuery (query );
1720+ // If no exception, parameters should still be set
1721+ assertEquals ("hash123" , config .livePreviewHash );
1722+ assertEquals ("entry123" , config .livePreviewEntryUid );
1723+ assertEquals ("blog" , config .livePreviewContentType );
1724+ } catch (IllegalStateException e ) {
1725+ // Expected - network call failed
1726+ assertNotNull (e );
1727+ } catch (IllegalAccessError e ) {
1728+ // Also acceptable - missing token
1729+ assertNotNull (e );
1730+ } catch (Exception e ) {
1731+ // Other exceptions are also acceptable
1732+ assertNotNull (e );
1733+ }
1734+ }
1735+
1736+ @ Test
1737+ void testLivePreviewQueryWithCustomHostUsesManagementToken () {
1738+ Config config = new Config ();
1739+ config .setHost ("api.contentstack.io" );
1740+ config .enableLivePreview (true );
1741+ config .setLivePreviewHost ("custom-preview.example.com" );
1742+ config .setManagementToken ("management_token_123" );
1743+ stack .setConfig (config );
1744+ stack .headers .put ("api_key" , "test_api_key" );
1745+
1746+ Map <String , String > query = new HashMap <>();
1747+ query .put ("live_preview" , "hash123" );
1748+ query .put ("content_type_uid" , "blog" );
1749+ query .put ("entry_uid" , "entry123" );
1750+
1751+ // This will attempt network call with management token
1752+ // We expect IllegalStateException due to network failure
1753+ assertThrows (IllegalStateException .class , () -> stack .livePreviewQuery (query ));
1754+ }
1755+
1756+ @ Test
1757+ void testLivePreviewQueryParameterAssignment () {
1758+ Config config = new Config ();
1759+ config .setHost ("api.contentstack.io" );
1760+ config .enableLivePreview (true );
1761+ config .setLivePreviewHost ("rest-preview.contentstack.com" );
1762+ config .setPreviewToken ("preview_token_123" );
1763+ stack .setConfig (config );
1764+ stack .headers .put ("api_key" , "test_api_key" );
1765+
1766+ Map <String , String > query = new HashMap <>();
1767+ query .put ("live_preview" , "hash_abc123" );
1768+ query .put ("content_type_uid" , "product" );
1769+ query .put ("entry_uid" , "product_entry_456" );
1770+ query .put ("release_id" , "release_789" );
1771+ query .put ("preview_timestamp" , "2024-12-31T23:59:59Z" );
1772+
1773+ try {
1774+ stack .livePreviewQuery (query );
1775+ } catch (Exception e ) {
1776+ // Expected - network call will fail, but check all parameters were set correctly
1777+ assertEquals ("hash_abc123" , config .livePreviewHash );
1778+ assertEquals ("product_entry_456" , config .livePreviewEntryUid );
1779+ assertEquals ("product" , config .livePreviewContentType );
1780+ assertEquals ("release_789" , config .releaseId );
1781+ assertEquals ("2024-12-31T23:59:59Z" , config .previewTimestamp );
1782+ }
1783+ }
1784+
1785+ @ Test
1786+ void testLivePreviewQueryAllParametersNull () {
1787+ Config config = new Config ();
1788+ config .setHost ("api.contentstack.io" );
1789+ config .enableLivePreview (true );
1790+ config .setLivePreviewHost ("rest-preview.contentstack.com" );
1791+ config .setPreviewToken ("preview_token_123" );
1792+ // Set existing values
1793+ config .releaseId = "old_release" ;
1794+ config .previewTimestamp = "old_timestamp" ;
1795+ stack .setConfig (config );
1796+ stack .headers .put ("api_key" , "test_api_key" );
1797+
1798+ Map <String , String > query = new HashMap <>();
1799+ query .put ("live_preview" , "hash123" );
1800+ query .put ("content_type_uid" , "blog" );
1801+ query .put ("entry_uid" , "entry123" );
1802+ // release_id and preview_timestamp not in query - should be set to null
1803+
1804+ try {
1805+ stack .livePreviewQuery (query );
1806+ } catch (Exception e ) {
1807+ // Expected - network call will fail
1808+ // Verify that optional parameters were set to null
1809+ assertNull (config .releaseId );
1810+ assertNull (config .previewTimestamp );
1811+ }
1812+ }
1813+
1814+ @ Test
1815+ void testLivePreviewQueryIOExceptionThrowsIllegalStateException () {
1816+ Config config = new Config ();
1817+ config .setHost ("api.contentstack.io" );
1818+ config .enableLivePreview (true );
1819+ config .setLivePreviewHost ("rest-preview.contentstack.com" );
1820+ config .setPreviewToken ("preview_token_123" );
1821+ stack .setConfig (config );
1822+ stack .headers .put ("api_key" , "test_api_key" );
1823+
1824+ Map <String , String > query = new HashMap <>();
1825+ query .put ("live_preview" , "hash123" );
1826+ query .put ("content_type_uid" , "blog" );
1827+ query .put ("entry_uid" , "entry123" );
1828+
1829+ // Network call may fail with IOException (caught and re-thrown as IllegalStateException)
1830+ // or may succeed depending on network configuration
1831+ try {
1832+ stack .livePreviewQuery (query );
1833+ // If successful, just verify parameters were set
1834+ assertEquals ("hash123" , config .livePreviewHash );
1835+ assertEquals ("entry123" , config .livePreviewEntryUid );
1836+ assertEquals ("blog" , config .livePreviewContentType );
1837+ } catch (IllegalStateException e ) {
1838+ // Expected - IOException was caught and re-thrown
1839+ assertNotNull (e );
1840+ } catch (Exception e ) {
1841+ // Other exceptions are also acceptable for this test
1842+ assertNotNull (e );
1843+ }
1844+ }
15261845}
15271846
0 commit comments