Skip to content

Commit 9545a60

Browse files
authored
Merge pull request #216 from PxTools/fix/pivot
Misc fixes in the pivot functionallity
2 parents 1f76f6b + b8b55a5 commit 9545a60

File tree

8 files changed

+565
-49
lines changed

8 files changed

+565
-49
lines changed
Lines changed: 319 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,319 @@
1+
namespace PxWeb.UnitTests.Data
2+
{
3+
4+
[TestClass]
5+
public class VariablePlacementTests
6+
{
7+
[TestMethod]
8+
public void ShouldReturnNoPreferredPlacementIfPlacemntIsNull()
9+
{
10+
// Arrange
11+
IPlacementHandler placementHandler = new PlacementHandler();
12+
VariablesSelection variablesSelection = new VariablesSelection();
13+
variablesSelection.Palcement = null;
14+
Selection[]? selection = GetSelectionForAllVariables();
15+
PXMeta meta = ModelStore.CreateModelA().Meta;
16+
Problem? problem;
17+
18+
// Act
19+
var placement = placementHandler.GetPlacment(variablesSelection,
20+
selection,
21+
meta,
22+
out problem);
23+
24+
// Assert
25+
Assert.IsNull(problem);
26+
Assert.IsNull(placement);
27+
28+
}
29+
30+
[TestMethod]
31+
public void ShouldReturnNoPreferredPlacementIfPlacemntIsNull2()
32+
{
33+
// Arrange
34+
IPlacementHandler placementHandler = new PlacementHandler();
35+
VariablesSelection variablesSelection = new VariablesSelection();
36+
variablesSelection.Palcement = new VariablePlacementType();
37+
Selection[]? selection = GetSelectionForAllVariables();
38+
PXMeta meta = ModelStore.CreateModelA().Meta;
39+
Problem? problem;
40+
41+
// Act
42+
var placement = placementHandler.GetPlacment(variablesSelection,
43+
selection,
44+
meta,
45+
out problem);
46+
47+
// Assert
48+
Assert.IsNull(problem);
49+
Assert.IsNull(placement);
50+
51+
}
52+
53+
[TestMethod]
54+
public void ShouldReturnNoPreferredPlacementIfPlacemntIsEmpty()
55+
{
56+
// Arrange
57+
IPlacementHandler placementHandler = new PlacementHandler();
58+
VariablesSelection variablesSelection = new VariablesSelection();
59+
60+
variablesSelection.Palcement = new VariablePlacementType();
61+
variablesSelection.Palcement.Heading = new List<string>();
62+
variablesSelection.Palcement.Stub = new List<string>();
63+
Selection[]? selection = GetSelectionForAllVariables();
64+
PXMeta meta = ModelStore.CreateModelA().Meta;
65+
66+
Problem? problem;
67+
68+
// Act
69+
var placement = placementHandler.GetPlacment(variablesSelection,
70+
selection,
71+
meta,
72+
out problem);
73+
74+
// Assert
75+
Assert.IsNull(problem);
76+
Assert.IsNull(placement);
77+
78+
}
79+
80+
[TestMethod]
81+
public void ShouldReturnNoPreferredPlacementIfPlacemntVariableDoesNotExist()
82+
{
83+
// Arrange
84+
IPlacementHandler placementHandler = new PlacementHandler();
85+
VariablesSelection variablesSelection = new VariablesSelection();
86+
87+
variablesSelection.Palcement = new VariablePlacementType();
88+
variablesSelection.Palcement.Heading = new List<string>();
89+
variablesSelection.Palcement.Heading.Add("Age");
90+
variablesSelection.Palcement.Stub = new List<string>();
91+
Selection[]? selection = GetSelectionForAllVariables();
92+
PXMeta meta = ModelStore.CreateModelA().Meta;
93+
94+
Problem? problem;
95+
96+
// Act
97+
var placement = placementHandler.GetPlacment(variablesSelection,
98+
selection,
99+
meta,
100+
out problem);
101+
102+
// Assert
103+
Assert.IsNotNull(problem);
104+
Assert.IsNull(placement);
105+
}
106+
107+
[TestMethod]
108+
public void ShouldReturnNoPreferredPlacementIfPlacemntVariableIsDouplicated()
109+
{
110+
// Arrange
111+
IPlacementHandler placementHandler = new PlacementHandler();
112+
VariablesSelection variablesSelection = new VariablesSelection();
113+
114+
variablesSelection.Palcement = new VariablePlacementType();
115+
variablesSelection.Palcement.Heading = new List<string>();
116+
variablesSelection.Palcement.Heading.Add("PointOfTime");
117+
variablesSelection.Palcement.Heading.Add("MEASURE");
118+
variablesSelection.Palcement.Stub = new List<string>();
119+
variablesSelection.Palcement.Stub.Add("PointOfTime");
120+
Selection[]? selection = GetSelectionForAllVariables();
121+
PXMeta meta = ModelStore.CreateModelA().Meta;
122+
123+
Problem? problem;
124+
125+
// Act
126+
var placement = placementHandler.GetPlacment(variablesSelection,
127+
selection,
128+
meta,
129+
out problem);
130+
131+
// Assert
132+
Assert.IsNotNull(problem);
133+
Assert.IsNull(placement);
134+
}
135+
136+
[TestMethod]
137+
public void ShouldNotReturnPreferredPlacementWhenUsingTime()
138+
{
139+
// Arrange
140+
IPlacementHandler placementHandler = new PlacementHandler();
141+
VariablesSelection variablesSelection = new VariablesSelection();
142+
143+
variablesSelection.Palcement = new VariablePlacementType();
144+
variablesSelection.Palcement.Heading = new List<string>();
145+
variablesSelection.Palcement.Heading.Add("TIME");
146+
variablesSelection.Palcement.Heading.Add("MEASURE");
147+
variablesSelection.Palcement.Stub = new List<string>();
148+
variablesSelection.Palcement.Stub.Add("PointOfTime");
149+
Selection[]? selection = GetSelectionForAllVariables();
150+
PXMeta meta = ModelStore.CreateModelA().Meta;
151+
152+
Problem? problem;
153+
154+
// Act
155+
var placement = placementHandler.GetPlacment(variablesSelection,
156+
selection,
157+
meta,
158+
out problem);
159+
160+
// Assert
161+
Assert.IsNotNull(problem);
162+
Assert.IsNull(placement);
163+
}
164+
165+
[TestMethod]
166+
public void ShouldNotReturnPreferredPlacementWhenSpecifyingTooManyVariables()
167+
{
168+
// Arrange
169+
IPlacementHandler placementHandler = new PlacementHandler();
170+
VariablesSelection variablesSelection = new VariablesSelection();
171+
172+
variablesSelection.Palcement = new VariablePlacementType();
173+
variablesSelection.Palcement.Heading = new List<string>();
174+
variablesSelection.Palcement.Heading.Add("TIME");
175+
variablesSelection.Palcement.Heading.Add("MEASURE");
176+
variablesSelection.Palcement.Stub = new List<string>();
177+
variablesSelection.Palcement.Stub.Add("Measure");
178+
variablesSelection.Palcement.Stub.Add("X");
179+
Selection[]? selection = GetSelectionForAllVariables();
180+
PXMeta meta = ModelStore.CreateModelA().Meta;
181+
182+
Problem? problem;
183+
184+
// Act
185+
var placement = placementHandler.GetPlacment(variablesSelection,
186+
selection,
187+
meta,
188+
out problem);
189+
190+
// Assert
191+
Assert.IsNotNull(problem);
192+
Assert.IsNull(placement);
193+
}
194+
195+
196+
[TestMethod]
197+
public void ShouldReturnPreferredPlacementWhenUsingTime()
198+
{
199+
// Arrange
200+
IPlacementHandler placementHandler = new PlacementHandler();
201+
VariablesSelection variablesSelection = new VariablesSelection();
202+
203+
variablesSelection.Palcement = new VariablePlacementType();
204+
variablesSelection.Palcement.Heading = new List<string>();
205+
variablesSelection.Palcement.Heading.Add("TIME");
206+
variablesSelection.Palcement.Heading.Add("MEASURE");
207+
variablesSelection.Palcement.Stub = new List<string>();
208+
variablesSelection.Palcement.Stub.Add("GENDER");
209+
Selection[]? selection = GetSelectionForAllVariables();
210+
PXMeta meta = ModelStore.CreateModelA().Meta;
211+
212+
Problem? problem;
213+
214+
// Act
215+
var placement = placementHandler.GetPlacment(variablesSelection,
216+
selection,
217+
meta,
218+
out problem);
219+
220+
// Assert
221+
Assert.IsNull(problem);
222+
Assert.IsNotNull(placement);
223+
Assert.AreEqual(2, placement.Heading.Count);
224+
}
225+
226+
[TestMethod]
227+
public void ShouldReturnPreferredPlacementWhenOnlySpecifyingHeading()
228+
{
229+
// Arrange
230+
IPlacementHandler placementHandler = new PlacementHandler();
231+
VariablesSelection variablesSelection = new VariablesSelection();
232+
233+
variablesSelection.Palcement = new VariablePlacementType();
234+
variablesSelection.Palcement.Heading = new List<string>();
235+
variablesSelection.Palcement.Heading.Add("MEASURE");
236+
variablesSelection.Palcement.Stub = new List<string>();
237+
Selection[]? selection = GetSelectionForAllVariables();
238+
PXMeta meta = ModelStore.CreateModelA().Meta;
239+
240+
Problem? problem;
241+
242+
// Act
243+
var placement = placementHandler.GetPlacment(variablesSelection,
244+
selection,
245+
meta,
246+
out problem);
247+
248+
// Assert
249+
Assert.IsNull(problem);
250+
Assert.IsNotNull(placement);
251+
Assert.AreEqual(2, placement.Stub.Count);
252+
}
253+
254+
[TestMethod]
255+
public void ShouldReturnPreferredPlacementWhenOnlySpecifyingHeadingWithElimination()
256+
{
257+
// Arrange
258+
IPlacementHandler placementHandler = new PlacementHandler();
259+
VariablesSelection variablesSelection = new VariablesSelection();
260+
261+
variablesSelection.Palcement = new VariablePlacementType();
262+
variablesSelection.Palcement.Heading = new List<string>();
263+
variablesSelection.Palcement.Heading.Add("MEASURE");
264+
variablesSelection.Palcement.Stub = new List<string>();
265+
Selection[]? selection = GetSelectionForMandantoryVariables();
266+
PXMeta meta = ModelStore.CreateModelA().Meta;
267+
268+
Problem? problem;
269+
270+
// Act
271+
var placement = placementHandler.GetPlacment(variablesSelection,
272+
selection,
273+
meta,
274+
out problem);
275+
276+
// Assert
277+
Assert.IsNull(problem);
278+
Assert.IsNotNull(placement);
279+
Assert.AreEqual(1, placement.Stub.Count);
280+
}
281+
282+
private static Selection[] GetSelectionForAllVariables()
283+
{
284+
var selections = new List<Selection>();
285+
var selection = new Selection("PointOfTime");
286+
selection.ValueCodes.Add("2000");
287+
selection.ValueCodes.Add("2001");
288+
selection.ValueCodes.Add("2002");
289+
selections.Add(selection);
290+
selection = new Selection("Measure");
291+
selection.ValueCodes.Add("M1");
292+
selections.Add(selection);
293+
selection = new Selection("GENDER");
294+
selection.ValueCodes.Add("M");
295+
selections.Add(selection);
296+
return selections.ToArray();
297+
298+
}
299+
300+
301+
private static Selection[] GetSelectionForMandantoryVariables()
302+
{
303+
var selections = new List<Selection>();
304+
var selection = new Selection("PointOfTime");
305+
selection.ValueCodes.Add("2000");
306+
selection.ValueCodes.Add("2001");
307+
selection.ValueCodes.Add("2002");
308+
selections.Add(selection);
309+
selection = new Selection("Measure");
310+
selection.ValueCodes.Add("M1");
311+
selections.Add(selection);
312+
selection = new Selection("GENDER");
313+
selections.Add(selection);
314+
return selections.ToArray();
315+
}
316+
317+
318+
}
319+
}

PxWeb.UnitTests/ModelStore.cs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,49 @@
22
{
33
internal static class ModelStore
44
{
5+
6+
public static PXModel CreateModelA()
7+
{
8+
9+
PXModel model = new PXModel();
10+
PXMeta meta = new PXMeta();
11+
12+
// Create time variable
13+
var name = "PointOfTime";
14+
Variable variable = new Variable(name, PlacementType.Heading);
15+
16+
for (int i = 1968; i < 2025; i++)
17+
{
18+
variable.Values.Add(CreateValue($"{i}"));
19+
}
20+
variable.TimeValue = $"TLIST(A, \"1968\"-\"2025\")";
21+
variable.IsTime = true;
22+
meta.AddVariable(variable);
23+
24+
// Create content variable
25+
name = $"MEASURE";
26+
variable = new Variable(name, PlacementType.Heading);
27+
variable.Values.Add(CreateValue($"M1"));
28+
variable.Values.Add(CreateValue($"M2"));
29+
variable.Elimination = false;
30+
variable.IsContentVariable = true;
31+
meta.Variables.Add(variable);
32+
33+
//Create classification variable gender
34+
35+
name = "GENDER";
36+
37+
variable = new Variable(name, PlacementType.Stub);
38+
variable.Values.Add(CreateValue($"M"));
39+
variable.Values.Add(CreateValue($"F"));
40+
variable.Elimination = true;
41+
meta.Variables.Add(variable);
42+
43+
model.Meta = meta;
44+
return model;
45+
}
46+
47+
548
public static PXModel GetModelWithOnlyOneVariable(int numberOfValues)
649
{
750

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using PCAxis.Paxiom;
2+
3+
using PxWeb.Api2.Server.Models;
4+
5+
namespace PxWeb.Code.Api2.DataSelection
6+
{
7+
public interface IPlacementHandler
8+
{
9+
VariablePlacementType? GetPlacment(VariablesSelection variablesSelection, Selection[] selection, PXMeta meta, out Problem? problem);
10+
}
11+
}

0 commit comments

Comments
 (0)