@@ -24,15 +24,159 @@ Rectangle {
2424 id: root
2525 width: units.gu(40)
2626 height: units.gu(80)
27− color: "black" //Theme.palette.selected.background
27+ color: Theme.palette.selected.background
28+
29+ property real validInputRating: 1
30+ property real invalidInputRating: -1
31+ property string validInputText: "Great!"
32+ property string invalidInputText: ""
33+
34+ property var triggeredDataBoth: { "rating": validInputRating, "review": validInputText, "author": null }
35+ property var triggeredDataRatingOnly: { "rating": validInputRating, "review": invalidInputText, "author": null }
36+ property var triggeredDataReviewOnly: { "rating": invalidInputRating, "review": validInputText, "author": null }
37+
38+ property var widgetDataBoth: { "visible": "both", "required": "both" }
39+ property var widgetDataRating: { "visible": "rating", "required": "rating" }
40+ property var widgetDataRatingBroken: { "visible": "rating", "required": "review" }
41+ property var widgetDataReview: { "visible": "review", "required": "review" }
42+ property var widgetDataReviewBroken: { "visible": "review", "required": "rating" }
43+
44+ property var widgetDataNewLabels: { "visible": "both", "required": "both", "rating-label": "TestRatingLabel", "review-label": "TestReviewLabel", "submit-label": "TestSubmitLabel" }
2845
2946 PreviewRating {
3047 id: previewRating
3148 anchors.fill: parent
49+ widgetData: widgetDataBoth
50+ widgetId: "previewRating"
51+ }
52+
53+ SignalSpy {
54+ id: spy
55+ signalName: "triggered"
3256 }
3357
3458 UT.UnityTestCase {
35− name: "PreviewTextSummaryTest"
59+ name: "PreviewRatingTest"
3660 when: windowShown
61+
62+ property var rating: findChild(previewRating, "rating")
63+ property var reviewField: findChild(previewRating, "reviewField")
64+ property var submitButton: findChild(previewRating, "submitButton")
65+
66+ function init() {
67+ rating.value = -1;
68+ reviewField.text = "";
69+ }
70+
71+ function test_labels() {
72+ var ratingLabel = findChild(previewRating, "ratingLabel");
73+ var reviewLabel = findChild(previewRating, "reviewLabel");
74+
75+ previewRating.widgetData = widgetDataNewLabels;
76+ compare(ratingLabel.text, widgetDataNewLabels["rating-label"]);
77+ compare(reviewLabel.text, widgetDataNewLabels["review-label"]);
78+ compare(submitButton.text, widgetDataNewLabels["submit-label"]);
79+ }
80+
81+ function test_submit_and_visibility_data() {
82+ return [
83+ {tag: "both, null review", widgetData: widgetDataBoth, inputRating: invalidInputRating, inputText: invalidInputText, emitted: false},
84+ {tag: "both, rating-only review", widgetData: widgetDataBoth, inputRating: validInputRating, inputText: invalidInputText, emitted: false},
85+ {tag: "both, review-only review", widgetData: widgetDataBoth, inputRating: invalidInputRating, inputText: validInputText, emitted: false},
86+ {tag: "both, complete review", widgetData: widgetDataBoth, inputRating: validInputRating, inputText: validInputText, emitted: true},
87+ {tag: "rating, null review", widgetData: widgetDataRating, inputRating: invalidInputRating, inputText: invalidInputText, emitted: false},
88+ {tag: "rating, rating-only review", widgetData: widgetDataRating, inputRating: validInputRating, inputText: invalidInputText, emitted: true},
89+ {tag: "rating, review-only review", widgetData: widgetDataRating, inputRating: invalidInputRating, inputText: validInputText, emitted: false},
90+ {tag: "rating, complete review", widgetData: widgetDataRating, inputRating: validInputRating, inputText: validInputText, emitted: true},
91+ {tag: "rating broken, null review", widgetData: widgetDataRatingBroken, inputRating: invalidInputRating, inputText: invalidInputText, emitted: false},
92+ {tag: "rating broken, rating-only review", widgetData: widgetDataRatingBroken, inputRating: validInputRating, inputText: invalidInputText, emitted: false},
93+ {tag: "rating broken, review-only review", widgetData: widgetDataRatingBroken, inputRating: invalidInputRating, inputText: validInputText, emitted: false},
94+ {tag: "rating broken, complete review", widgetData: widgetDataRatingBroken, inputRating: validInputRating, inputText: validInputText, emitted: false},
95+ {tag: "review, null review", widgetData: widgetDataReview, inputRating: invalidInputRating, inputText: invalidInputText, emitted: false},
96+ {tag: "review, rating-only review", widgetData: widgetDataReview, inputRating: validInputRating, inputText: invalidInputText, emitted: false},
97+ {tag: "review, review-only review", widgetData: widgetDataReview, inputRating: invalidInputRating, inputText: validInputText, emitted: true},
98+ {tag: "review, complete review", widgetData: widgetDataReview, inputRating: validInputRating, inputText: validInputText, emitted: true},
99+ {tag: "review broken, null review", widgetData: widgetDataReviewBroken, inputRating: invalidInputRating, inputText: invalidInputText, emitted: false},
100+ {tag: "review broken, rating-only review", widgetData: widgetDataReviewBroken, inputRating: validInputRating, inputText: invalidInputText, emitted: false},
101+ {tag: "review broken, review-only review", widgetData: widgetDataReviewBroken, inputRating: invalidInputRating, inputText: validInputText, emitted: false},
102+ {tag: "review broken, complete review", widgetData: widgetDataReviewBroken, inputRating: validInputRating, inputText: validInputText, emitted: false},
103+ ];
104+ }
105+
106+ function test_submit_and_visibility(data) {
107+ spy.clear();
108+ spy.target = previewRating;
109+
110+ previewRating.widgetData = data.widgetData;
111+
112+ if (data.widgetData["visible"] !== "review") {
113+ verify(rating.visible === true);
114+
115+ rating.value = data.inputRating;
116+ if (data.widgetData["required"] !== "rating" || data.inputRating < 0) {
117+ compare(spy.count, 0);
118+ } else {
119+ compare(spy.count, 1);
120+ }
121+ } else {
122+ verify(rating.visible === false);
123+ }
124+
125+ if (data.widgetData["visible"] !== "rating") {
126+ verify(reviewField.visible === true);
127+
128+ reviewField.text = data.inputText;
129+ mouseClick(submitButton, submitButton.width / 2, submitButton.height / 2);
130+ switch (data.widgetData["required"]) {
131+ case "rating": compare(spy.count, 0); break;
132+ case "both":
133+ default: {
134+ if (data.inputRating < 0 || data.inputText === "") {
135+ compare(spy.count, 0); break;
136+ }
137+ }
138+ case "review": {
139+ if (data.inputText === "") {
140+ compare(spy.count, 0); break;
141+ } else {
142+ compare(spy.count, 1); break;
143+ }
144+ }
145+ }
146+ } else {
147+ verify(reviewField.visible === false);
148+ }
149+
150+ compare(spy.count === 1, data.emitted);
151+ }
152+
153+ function test_triggered_data() {
154+ return [
155+ {tag: "complete review", widgetData: widgetDataBoth, inputRating: validInputRating, inputText: validInputText, triggeredData: triggeredDataBoth},
156+ {tag: "rating-only review", widgetData: widgetDataRating, inputRating: validInputRating, inputText: invalidInputText, triggeredData: triggeredDataRatingOnly},
157+ {tag: "review-only review", widgetData: widgetDataReview, inputRating: invalidInputRating, inputText: validInputText, triggeredData: triggeredDataReviewOnly}
158+ ];
159+ }
160+
161+ function test_triggered(data) {
162+ spy.clear();
163+ spy.target = previewRating;
164+
165+ previewRating.widgetData = data.widgetData;
166+
167+ if (data.inputRating > 0) rating.value = data.inputRating;
168+ if (data.inputText !== "") {
169+ reviewField.text = data.inputText;
170+ mouseClick(submitButton, submitButton.width / 2, submitButton.height / 2);
171+ }
172+
173+ compare(spy.count, 1);
174+ var args = spy.signalArguments[0];
175+ compare(args[0], previewRating.widgetId);
176+ compare(args[1], data.widgetData["required"]);
177+ compare(args[2]["rating"], data.triggeredData["rating"]);
178+ compare(args[2]["review"], data.triggeredData["review"]);
179+ verify(args[2]["author"]); // Just verifying it exists now
180+ }
37181 }
38182}