Skip to content

Commit acb02e9

Browse files
authored
T1283238. Fix last row in paginated dataStore (DevExpress#29625) (DevExpress#29663)
Co-authored-by: Vladimir Bushmanov <[email protected]>
1 parent cb6ba49 commit acb02e9

21 files changed

+15328
-13
lines changed
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
import { RequestMock } from 'testcafe';
2+
import dimensions from './OLAP_dimensions_response';
3+
import levels from './OLAP_levels_response';
4+
import hierarchies from './OLAP_hierarchies_response';
5+
import measures from './OLAP_measures_response';
6+
import measureGroups from './OLAP_measure_groups_response';
7+
import count from './OLAP_count_response';
8+
import countColumnsOnly from './OLAP_count_columns_only_response';
9+
import data from './OLAP_data_response';
10+
import dataOffset from './OLAP_data_offset_response';
11+
import dataColumnsOnly from './OLAP_data_columns_only_response';
12+
13+
export const OLAPApiMock = RequestMock()
14+
.onRequestTo((req) => req.url.includes('/api/data') && req.method === 'options')
15+
.respond(
16+
undefined,
17+
200,
18+
{
19+
'access-control-allow-headers': 'Origin, Content-Type, Accept',
20+
'access-control-allow-origin': '*',
21+
'access-control-request-method': 'POST',
22+
allow: 'OPTIONS, TRACE, GET, HEAD, POST',
23+
},
24+
)
25+
// structure
26+
.onRequestTo((req) => req.url.includes('/api/data')
27+
&& req.method === 'post'
28+
&& req.body.toString().includes('<RequestType>MDSCHEMA_DIMENSIONS</RequestType>'))
29+
.respond(
30+
dimensions,
31+
200,
32+
{ 'access-control-allow-origin': '*', 'content-type': 'text/xml' },
33+
)
34+
.onRequestTo((req) => req.url.includes('/api/data')
35+
&& req.method === 'post'
36+
&& req.body.toString().includes('<RequestType>MDSCHEMA_MEASURES</RequestType>'))
37+
.respond(
38+
measures,
39+
200,
40+
{ 'access-control-allow-origin': '*', 'content-type': 'text/xml' },
41+
)
42+
.onRequestTo((req) => req.url.includes('/api/data')
43+
&& req.method === 'post'
44+
&& req.body.toString().includes('<RequestType>MDSCHEMA_HIERARCHIES</RequestType>'))
45+
.respond(
46+
hierarchies,
47+
200,
48+
{ 'access-control-allow-origin': '*', 'content-type': 'text/xml' },
49+
)
50+
.onRequestTo((req) => req.url.includes('/api/data')
51+
&& req.method === 'post'
52+
&& req.body.toString().includes('<RequestType>MDSCHEMA_LEVELS</RequestType>'))
53+
.respond(
54+
levels,
55+
200,
56+
{ 'access-control-allow-origin': '*', 'content-type': 'text/xml' },
57+
)
58+
.onRequestTo((req) => req.url.includes('/api/data')
59+
&& req.method === 'post'
60+
&& req.body.toString().includes('<RequestType>MDSCHEMA_MEASUREGROUPS</RequestType>'))
61+
.respond(
62+
measureGroups,
63+
200,
64+
{ 'access-control-allow-origin': '*', 'content-type': 'text/xml' },
65+
)
66+
// data
67+
.onRequestTo((req) => req.url.includes('/api/data')
68+
&& req.method === 'post'
69+
&& /set \[DX_columns] as Subset\(.*, 0, \d*\) set \[DX_rows] as Subset\(.*, 0, \d*\) SELECT/.test(req.body.toString()))
70+
.respond(
71+
data,
72+
200,
73+
{ 'access-control-allow-origin': '*', 'content-type': 'text/xml' },
74+
)
75+
.onRequestTo((req) => req.url.includes('/api/data')
76+
&& req.method === 'post'
77+
&& /as COUNT\(\[DX_columns]\) .* as COUNT\(\[DX_rows]\) SELECT/.test(req.body.toString()))
78+
.respond(
79+
count,
80+
200,
81+
{ 'access-control-allow-origin': '*', 'content-type': 'text/xml' },
82+
)
83+
// after scroll down
84+
.onRequestTo((req) => req.url.includes('/api/data')
85+
&& req.method === 'post'
86+
&& /set \[DX_columns] as Subset\(.*, 0, \d*\) set \[DX_rows] as Subset\(.*, \d{2,}, \d*\) SELECT/.test(req.body.toString()))
87+
.respond(
88+
dataOffset,
89+
200,
90+
{ 'access-control-allow-origin': '*', 'content-type': 'text/xml' },
91+
)
92+
// data without rows
93+
.onRequestTo((req) => req.url.includes('/api/data')
94+
&& req.method === 'post'
95+
&& /set \[DX_columns] as Subset\(.*, 0, \d*\) SELECT/.test(req.body.toString()))
96+
.respond(
97+
dataColumnsOnly,
98+
200,
99+
{ 'access-control-allow-origin': '*', 'content-type': 'text/xml' },
100+
)
101+
.onRequestTo((req) => req.url.includes('/api/data')
102+
&& req.method === 'post'
103+
&& req.body.toString().includes('as COUNT([DX_columns]) SELECT'))
104+
.respond(
105+
countColumnsOnly,
106+
200,
107+
{ 'access-control-allow-origin': '*', 'content-type': 'text/xml' },
108+
);

e2e/testcafe-devextreme/tests/pivotGrid/apiMocks/OLAP_count_columns_only_response.ts

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

e2e/testcafe-devextreme/tests/pivotGrid/apiMocks/OLAP_count_response.ts

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

e2e/testcafe-devextreme/tests/pivotGrid/apiMocks/OLAP_data_columns_only_response.ts

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

e2e/testcafe-devextreme/tests/pivotGrid/apiMocks/OLAP_data_offset_response.ts

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

e2e/testcafe-devextreme/tests/pivotGrid/apiMocks/OLAP_data_response.ts

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

e2e/testcafe-devextreme/tests/pivotGrid/apiMocks/OLAP_dimensions_response.ts

Lines changed: 340 additions & 0 deletions
Large diffs are not rendered by default.

e2e/testcafe-devextreme/tests/pivotGrid/apiMocks/OLAP_hierarchies_response.ts

Lines changed: 4586 additions & 0 deletions
Large diffs are not rendered by default.

e2e/testcafe-devextreme/tests/pivotGrid/apiMocks/OLAP_levels_response.ts

Lines changed: 9047 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
export default `<?xml version="1.0"?>
2+
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
3+
<soap:Body>
4+
<DiscoverResponse xmlns="urn:schemas-microsoft-com:xml-analysis" xmlns:ddl2="http://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="http://schemas.microsoft.com/analysisservices/2003/engine/2/2" xmlns:ddl100="http://schemas.microsoft.com/analysisservices/2008/engine/100" xmlns:ddl100_100="http://schemas.microsoft.com/analysisservices/2008/engine/100/100" xmlns:ddl200="http://schemas.microsoft.com/analysisservices/2010/engine/200" xmlns:ddl200_200="http://schemas.microsoft.com/analysisservices/2010/engine/200/200" xmlns:ddl300="http://schemas.microsoft.com/analysisservices/2011/engine/300" xmlns:ddl300_300="http://schemas.microsoft.com/analysisservices/2011/engine/300/300" xmlns:ddl400="http://schemas.microsoft.com/analysisservices/2012/engine/400" xmlns:ddl400_400="http://schemas.microsoft.com/analysisservices/2012/engine/400/400" xmlns:ddl410="http://schemas.microsoft.com/analysisservices/2012/engine/410" xmlns:ddl410_410="http://schemas.microsoft.com/analysisservices/2012/engine/410/410" xmlns:ddl500="http://schemas.microsoft.com/analysisservices/2013/engine/500" xmlns:ddl500_500="http://schemas.microsoft.com/analysisservices/2013/engine/500/500" xmlns:ddl600="http://schemas.microsoft.com/analysisservices/2013/engine/600" xmlns:ddl600_600="http://schemas.microsoft.com/analysisservices/2013/engine/600/600">
5+
<return>
6+
<root xmlns="urn:schemas-microsoft-com:xml-analysis:rowset" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msxmla="http://schemas.microsoft.com/analysisservices/2003/xmla">
7+
<xsd:schema xmlns:sql="urn:schemas-microsoft-com:xml-sql" targetNamespace="urn:schemas-microsoft-com:xml-analysis:rowset" elementFormDefault="qualified">
8+
<xsd:element name="root">
9+
<xsd:complexType>
10+
<xsd:sequence minOccurs="0" maxOccurs="unbounded">
11+
<xsd:element name="row" type="row"/>
12+
</xsd:sequence>
13+
</xsd:complexType>
14+
</xsd:element>
15+
<xsd:simpleType name="uuid">
16+
<xsd:restriction base="xsd:string">
17+
<xsd:pattern value="[0-9a-zA-Z]{8}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{12}"/>
18+
</xsd:restriction>
19+
</xsd:simpleType>
20+
<xsd:complexType name="xmlDocument">
21+
<xsd:sequence>
22+
<xsd:any/>
23+
</xsd:sequence>
24+
</xsd:complexType>
25+
<xsd:complexType name="row">
26+
<xsd:sequence>
27+
<xsd:element sql:field="CATALOG_NAME" name="CATALOG_NAME" type="xsd:string" minOccurs="0"/>
28+
<xsd:element sql:field="SCHEMA_NAME" name="SCHEMA_NAME" type="xsd:string" minOccurs="0"/>
29+
<xsd:element sql:field="CUBE_NAME" name="CUBE_NAME" type="xsd:string" minOccurs="0"/>
30+
<xsd:element sql:field="MEASUREGROUP_NAME" name="MEASUREGROUP_NAME" type="xsd:string" minOccurs="0"/>
31+
<xsd:element sql:field="DESCRIPTION" name="DESCRIPTION" type="xsd:string" minOccurs="0"/>
32+
<xsd:element sql:field="IS_WRITE_ENABLED" name="IS_WRITE_ENABLED" type="xsd:boolean" minOccurs="0"/>
33+
<xsd:element sql:field="MEASUREGROUP_CAPTION" name="MEASUREGROUP_CAPTION" type="xsd:string" minOccurs="0"/>
34+
</xsd:sequence>
35+
</xsd:complexType>
36+
</xsd:schema>
37+
<row>
38+
<CATALOG_NAME>Adventure Works DW Standard Edition</CATALOG_NAME>
39+
<CUBE_NAME>Adventure Works</CUBE_NAME>
40+
<MEASUREGROUP_NAME>Internet Customers</MEASUREGROUP_NAME>
41+
<DESCRIPTION/>
42+
<IS_WRITE_ENABLED>false</IS_WRITE_ENABLED>
43+
<MEASUREGROUP_CAPTION>Internet Customers</MEASUREGROUP_CAPTION>
44+
</row>
45+
<row>
46+
<CATALOG_NAME>Adventure Works DW Standard Edition</CATALOG_NAME>
47+
<CUBE_NAME>Adventure Works</CUBE_NAME>
48+
<MEASUREGROUP_NAME>Internet Orders</MEASUREGROUP_NAME>
49+
<DESCRIPTION/>
50+
<IS_WRITE_ENABLED>false</IS_WRITE_ENABLED>
51+
<MEASUREGROUP_CAPTION>Internet Orders</MEASUREGROUP_CAPTION>
52+
</row>
53+
<row>
54+
<CATALOG_NAME>Adventure Works DW Standard Edition</CATALOG_NAME>
55+
<CUBE_NAME>Adventure Works</CUBE_NAME>
56+
<MEASUREGROUP_NAME>Internet Sales</MEASUREGROUP_NAME>
57+
<DESCRIPTION/>
58+
<IS_WRITE_ENABLED>false</IS_WRITE_ENABLED>
59+
<MEASUREGROUP_CAPTION>Internet Sales</MEASUREGROUP_CAPTION>
60+
</row>
61+
<row>
62+
<CATALOG_NAME>Adventure Works DW Standard Edition</CATALOG_NAME>
63+
<CUBE_NAME>Adventure Works</CUBE_NAME>
64+
<MEASUREGROUP_NAME>Reseller Orders</MEASUREGROUP_NAME>
65+
<DESCRIPTION/>
66+
<IS_WRITE_ENABLED>false</IS_WRITE_ENABLED>
67+
<MEASUREGROUP_CAPTION>Reseller Orders</MEASUREGROUP_CAPTION>
68+
</row>
69+
<row>
70+
<CATALOG_NAME>Adventure Works DW Standard Edition</CATALOG_NAME>
71+
<CUBE_NAME>Adventure Works</CUBE_NAME>
72+
<MEASUREGROUP_NAME>Reseller Sales</MEASUREGROUP_NAME>
73+
<DESCRIPTION/>
74+
<IS_WRITE_ENABLED>false</IS_WRITE_ENABLED>
75+
<MEASUREGROUP_CAPTION>Reseller Sales</MEASUREGROUP_CAPTION>
76+
</row>
77+
<row>
78+
<CATALOG_NAME>Adventure Works DW Standard Edition</CATALOG_NAME>
79+
<CUBE_NAME>Adventure Works</CUBE_NAME>
80+
<MEASUREGROUP_NAME>Sales Orders</MEASUREGROUP_NAME>
81+
<DESCRIPTION/>
82+
<IS_WRITE_ENABLED>false</IS_WRITE_ENABLED>
83+
<MEASUREGROUP_CAPTION>Sales Orders</MEASUREGROUP_CAPTION>
84+
</row>
85+
<row>
86+
<CATALOG_NAME>Adventure Works DW Standard Edition</CATALOG_NAME>
87+
<CUBE_NAME>Adventure Works</CUBE_NAME>
88+
<MEASUREGROUP_NAME>Sales Reasons</MEASUREGROUP_NAME>
89+
<DESCRIPTION/>
90+
<IS_WRITE_ENABLED>false</IS_WRITE_ENABLED>
91+
<MEASUREGROUP_CAPTION>Sales Reasons</MEASUREGROUP_CAPTION>
92+
</row>
93+
<row>
94+
<CATALOG_NAME>Adventure Works DW Standard Edition</CATALOG_NAME>
95+
<CUBE_NAME>Adventure Works</CUBE_NAME>
96+
<MEASUREGROUP_NAME>Sales Summary</MEASUREGROUP_NAME>
97+
<DESCRIPTION/>
98+
<IS_WRITE_ENABLED>false</IS_WRITE_ENABLED>
99+
<MEASUREGROUP_CAPTION>Sales Summary</MEASUREGROUP_CAPTION>
100+
</row>
101+
<row>
102+
<CATALOG_NAME>Adventure Works DW Standard Edition</CATALOG_NAME>
103+
<CUBE_NAME>Adventure Works</CUBE_NAME>
104+
<MEASUREGROUP_NAME>Sales Targets</MEASUREGROUP_NAME>
105+
<DESCRIPTION/>
106+
<IS_WRITE_ENABLED>false</IS_WRITE_ENABLED>
107+
<MEASUREGROUP_CAPTION>Sales Targets</MEASUREGROUP_CAPTION>
108+
</row>
109+
</root>
110+
</return>
111+
</DiscoverResponse>
112+
</soap:Body>
113+
</soap:Envelope>`;

0 commit comments

Comments
 (0)