retold-data-service 2.0.21 → 2.0.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/.quackage-comprehension-loader.json +19 -0
  2. package/bin/retold-data-service-clone.js +4 -1
  3. package/generate-bookstore-comprehension.js +645 -0
  4. package/package.json +7 -7
  5. package/source/Retold-Data-Service.js +30 -2
  6. package/source/services/comprehension-loader/ComprehensionLoader-Command-Load.js +345 -0
  7. package/source/services/comprehension-loader/ComprehensionLoader-Command-Schema.js +97 -0
  8. package/source/services/comprehension-loader/ComprehensionLoader-Command-Session.js +221 -0
  9. package/source/services/comprehension-loader/ComprehensionLoader-Command-WebUI.js +57 -0
  10. package/source/services/comprehension-loader/Retold-Data-Service-ComprehensionLoader.js +536 -0
  11. package/source/services/comprehension-loader/pict-app/Pict-Application-ComprehensionLoader-Configuration.json +9 -0
  12. package/source/services/comprehension-loader/pict-app/Pict-Application-ComprehensionLoader.js +86 -0
  13. package/source/services/comprehension-loader/pict-app/Pict-ComprehensionLoader-Bundle.js +6 -0
  14. package/source/services/comprehension-loader/pict-app/providers/Pict-Provider-ComprehensionLoader.js +760 -0
  15. package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-Layout.js +360 -0
  16. package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-Load.js +472 -0
  17. package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-Schema.js +119 -0
  18. package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-Session.js +269 -0
  19. package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-Source.js +330 -0
  20. package/source/services/comprehension-loader/web/comprehension-loader.js +6794 -0
  21. package/source/services/comprehension-loader/web/comprehension-loader.js.map +1 -0
  22. package/source/services/comprehension-loader/web/comprehension-loader.min.js +2 -0
  23. package/source/services/comprehension-loader/web/comprehension-loader.min.js.map +1 -0
  24. package/source/services/comprehension-loader/web/index.html +17 -0
  25. package/source/services/data-cloner/DataCloner-Command-Schema.js +407 -15
  26. package/source/services/data-cloner/Retold-Data-Service-DataCloner.js +59 -1
  27. package/source/services/data-cloner/pict-app/Pict-Application-DataCloner.js +1 -0
  28. package/source/services/data-cloner/pict-app/providers/Pict-Provider-DataCloner.js +125 -5
  29. package/source/services/data-cloner/pict-app/views/PictView-DataCloner-Connection.js +18 -8
  30. package/source/services/data-cloner/pict-app/views/PictView-DataCloner-Deploy.js +104 -1
  31. package/source/services/data-cloner/pict-app/views/PictView-DataCloner-Export.js +1 -1
  32. package/source/services/data-cloner/pict-app/views/PictView-DataCloner-Layout.js +12 -0
  33. package/source/services/data-cloner/web/data-cloner.js +201 -139
  34. package/source/services/data-cloner/web/data-cloner.js.map +1 -1
  35. package/source/services/data-cloner/web/data-cloner.min.js +1 -1
  36. package/source/services/data-cloner/web/data-cloner.min.js.map +1 -1
  37. package/test/RetoldDataService_tests.js +225 -0
@@ -1509,5 +1509,230 @@ suite
1509
1509
  );
1510
1510
  }
1511
1511
  );
1512
+
1513
+ suite
1514
+ (
1515
+ 'Sync with Standard Pagination',
1516
+ function()
1517
+ {
1518
+ let _SyncFable;
1519
+ let _SyncDB;
1520
+
1521
+ suiteSetup
1522
+ (
1523
+ function(fDone)
1524
+ {
1525
+ this.timeout(15000);
1526
+
1527
+ let tmpSyncSettings = {
1528
+ Product: 'SyncTestStandard',
1529
+ ProductVersion: '1.0.0',
1530
+ MeadowProvider: 'SQLite',
1531
+ LogStreams: [{ streamtype: 'console', level: 'fatal' }],
1532
+ SQLite: { SQLiteFilePath: ':memory:' }
1533
+ };
1534
+
1535
+ _SyncFable = new libFable(tmpSyncSettings);
1536
+
1537
+ // Register SQLite provider for destination
1538
+ _SyncFable.serviceManager.addServiceType('MeadowSQLiteProvider', libMeadowConnectionSQLite);
1539
+ _SyncFable.serviceManager.instantiateServiceProvider('MeadowSQLiteProvider');
1540
+
1541
+ _SyncFable.MeadowSQLiteProvider.connectAsync(
1542
+ (pError) =>
1543
+ {
1544
+ if (pError) return fDone(pError);
1545
+
1546
+ _SyncDB = _SyncFable.MeadowSQLiteProvider.db;
1547
+
1548
+ // Set up MeadowCloneRestClient pointed at the test server
1549
+ const libMeadowCloneRestClient = require('../node_modules/meadow-integration/source/services/clone/Meadow-Service-RestClient.js');
1550
+ _SyncFable.serviceManager.addServiceType('MeadowCloneRestClient', libMeadowCloneRestClient);
1551
+ _SyncFable.serviceManager.instantiateServiceProvider('MeadowCloneRestClient',
1552
+ {
1553
+ ServerURL: `${_BaseURL}1.0/`,
1554
+ UserID: false,
1555
+ Password: false
1556
+ });
1557
+
1558
+ // Set up Meadow prototype (required by sync entities)
1559
+ const libMeadow = require('meadow');
1560
+ _SyncFable._MeadowPrototype = libMeadow;
1561
+ _SyncFable.Meadow = libMeadow.new(_SyncFable, 'SyncTest-Prototype');
1562
+
1563
+ // Set up MeadowSync
1564
+ _SyncFable.ProgramConfiguration = {};
1565
+ const libMeadowSync = require('../node_modules/meadow-integration/source/services/clone/Meadow-Service-Sync.js');
1566
+ _SyncFable.serviceManager.addServiceType('MeadowSync', libMeadowSync);
1567
+ _SyncFable.serviceManager.instantiateServiceProvider('MeadowSync',
1568
+ {
1569
+ SyncEntityList: ['Author'],
1570
+ PageSize: 2,
1571
+ SyncDeletedRecords: false,
1572
+ UseAdvancedIDPagination: false
1573
+ });
1574
+
1575
+ // Load the test schema into MeadowSync
1576
+ let tmpFullModel = require('./model/MeadowModel-Extended.json');
1577
+ _SyncFable.MeadowSync.loadMeadowSchema(tmpFullModel,
1578
+ (pSchemaError) =>
1579
+ {
1580
+ if (pSchemaError)
1581
+ {
1582
+ return fDone(pSchemaError);
1583
+ }
1584
+ return fDone();
1585
+ });
1586
+ });
1587
+ }
1588
+ );
1589
+
1590
+ test
1591
+ (
1592
+ 'Should sync Author records using standard offset pagination',
1593
+ function(fDone)
1594
+ {
1595
+ this.timeout(15000);
1596
+
1597
+ _SyncFable.MeadowSync.syncAll(
1598
+ (pSyncError) =>
1599
+ {
1600
+ Expect(pSyncError).to.not.exist;
1601
+
1602
+ // Query the destination database to verify records were copied
1603
+ let tmpRows = _SyncDB.prepare('SELECT * FROM Author WHERE Deleted = 0 ORDER BY IDAuthor').all();
1604
+ Expect(tmpRows.length).to.be.greaterThan(0);
1605
+ Expect(tmpRows[0].IDAuthor).to.equal(1);
1606
+
1607
+ let tmpSyncEntity = _SyncFable.MeadowSync.MeadowSyncEntities['Author'];
1608
+ Expect(tmpSyncEntity.syncResults).to.be.an('object');
1609
+ Expect(tmpSyncEntity.syncResults.Created).to.be.greaterThan(0);
1610
+
1611
+ fDone();
1612
+ });
1613
+ }
1614
+ );
1615
+ }
1616
+ );
1617
+
1618
+ suite
1619
+ (
1620
+ 'Sync with Advanced ID Pagination',
1621
+ function()
1622
+ {
1623
+ let _SyncFable;
1624
+ let _SyncDB;
1625
+
1626
+ suiteSetup
1627
+ (
1628
+ function(fDone)
1629
+ {
1630
+ this.timeout(15000);
1631
+
1632
+ let tmpSyncSettings = {
1633
+ Product: 'SyncTestAdvanced',
1634
+ ProductVersion: '1.0.0',
1635
+ MeadowProvider: 'SQLite',
1636
+ LogStreams: [{ streamtype: 'console', level: 'fatal' }],
1637
+ SQLite: { SQLiteFilePath: ':memory:' }
1638
+ };
1639
+
1640
+ _SyncFable = new libFable(tmpSyncSettings);
1641
+
1642
+ // Register SQLite provider for destination
1643
+ _SyncFable.serviceManager.addServiceType('MeadowSQLiteProvider', libMeadowConnectionSQLite);
1644
+ _SyncFable.serviceManager.instantiateServiceProvider('MeadowSQLiteProvider');
1645
+
1646
+ _SyncFable.MeadowSQLiteProvider.connectAsync(
1647
+ (pError) =>
1648
+ {
1649
+ if (pError) return fDone(pError);
1650
+
1651
+ _SyncDB = _SyncFable.MeadowSQLiteProvider.db;
1652
+
1653
+ // Set up MeadowCloneRestClient pointed at the test server
1654
+ const libMeadowCloneRestClient = require('../node_modules/meadow-integration/source/services/clone/Meadow-Service-RestClient.js');
1655
+ _SyncFable.serviceManager.addServiceType('MeadowCloneRestClient', libMeadowCloneRestClient);
1656
+ _SyncFable.serviceManager.instantiateServiceProvider('MeadowCloneRestClient',
1657
+ {
1658
+ ServerURL: `${_BaseURL}1.0/`,
1659
+ UserID: false,
1660
+ Password: false
1661
+ });
1662
+
1663
+ // Set up Meadow prototype (required by sync entities)
1664
+ const libMeadow = require('meadow');
1665
+ _SyncFable._MeadowPrototype = libMeadow;
1666
+ _SyncFable.Meadow = libMeadow.new(_SyncFable, 'SyncTest-Prototype');
1667
+
1668
+ // Set up MeadowSync with advanced ID pagination enabled
1669
+ _SyncFable.ProgramConfiguration = {};
1670
+ const libMeadowSync = require('../node_modules/meadow-integration/source/services/clone/Meadow-Service-Sync.js');
1671
+ _SyncFable.serviceManager.addServiceType('MeadowSync', libMeadowSync);
1672
+ _SyncFable.serviceManager.instantiateServiceProvider('MeadowSync',
1673
+ {
1674
+ SyncEntityList: ['Author'],
1675
+ PageSize: 2,
1676
+ SyncDeletedRecords: false,
1677
+ UseAdvancedIDPagination: true
1678
+ });
1679
+
1680
+ // Load the test schema into MeadowSync
1681
+ let tmpFullModel = require('./model/MeadowModel-Extended.json');
1682
+ _SyncFable.MeadowSync.loadMeadowSchema(tmpFullModel,
1683
+ (pSchemaError) =>
1684
+ {
1685
+ if (pSchemaError)
1686
+ {
1687
+ return fDone(pSchemaError);
1688
+ }
1689
+ return fDone();
1690
+ });
1691
+ });
1692
+ }
1693
+ );
1694
+
1695
+ test
1696
+ (
1697
+ 'Should sync Author records using advanced ID (keyset) pagination',
1698
+ function(fDone)
1699
+ {
1700
+ this.timeout(15000);
1701
+
1702
+ _SyncFable.MeadowSync.syncAll(
1703
+ (pSyncError) =>
1704
+ {
1705
+ Expect(pSyncError).to.not.exist;
1706
+
1707
+ // Query the destination database to verify records were copied
1708
+ let tmpRows = _SyncDB.prepare('SELECT * FROM Author WHERE Deleted = 0 ORDER BY IDAuthor').all();
1709
+ Expect(tmpRows.length).to.be.greaterThan(0);
1710
+ Expect(tmpRows[0].IDAuthor).to.equal(1);
1711
+
1712
+ let tmpSyncEntity = _SyncFable.MeadowSync.MeadowSyncEntities['Author'];
1713
+ Expect(tmpSyncEntity.syncResults).to.be.an('object');
1714
+ Expect(tmpSyncEntity.syncResults.Created).to.be.greaterThan(0);
1715
+
1716
+ // Verify that UseAdvancedIDPagination was set on the entity
1717
+ Expect(tmpSyncEntity.UseAdvancedIDPagination).to.equal(true);
1718
+
1719
+ fDone();
1720
+ });
1721
+ }
1722
+ );
1723
+
1724
+ test
1725
+ (
1726
+ 'Should produce the same record count as standard pagination',
1727
+ function(fDone)
1728
+ {
1729
+ // The advanced pagination destination should have the same records
1730
+ let tmpRows = _SyncDB.prepare('SELECT COUNT(*) as cnt FROM Author WHERE Deleted = 0').get();
1731
+ Expect(tmpRows.cnt).to.be.greaterThan(0);
1732
+ fDone();
1733
+ }
1734
+ );
1735
+ }
1736
+ );
1512
1737
  }
1513
1738
  );