Skip to content

Commit f3bf82a

Browse files
committed
Merge branch 'release/2.13.1'
2 parents a17adfb + 918a649 commit f3bf82a

File tree

17 files changed

+65
-39
lines changed

17 files changed

+65
-39
lines changed

CHANGES.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
# Changelog
22

3+
## Version 2.13.1
4+
5+
* Searching for starred tests is now supported in test search as well
6+
* Tests can now be search based on them *not* containing a string in their error messages, via the `!~` operator
7+
* Fixed a UI bug affecting test queries, causing tests to disappear
8+
* Fixed UI bugs in help display
9+
10+
311
## Version 2.13.0
412

513
* Backslash can now be configured to replicate test data to an external ElasticSearch service

flask_app/search/logic.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44

55
from flask import current_app
66
from sqlalchemy import func
7-
7+
from flask_security import current_user
88
from psycopg2.extras import DateTimeTZRange
99

1010
from . import value_parsers
1111
from ..filters import builders as filter_builders
1212
from ..models import (Entity, Label, Product, ProductRevision, ProductVersion, Session,
1313
SessionMetadata, Subject, SubjectInstance, Test, Error,
1414
TestInformation, User, db, session_entity, session_label,
15-
session_subject)
15+
session_subject, UserStarredTests)
1616
from .exceptions import UnknownField
1717
from .helpers import only_ops
1818

@@ -123,11 +123,13 @@ def get_base_query(self):
123123
return (Test.query
124124
.join(Session)
125125
.join(TestInformation)
126-
.outerjoin(Error, Error.test_id == Test.id)
127126
.join(User, User.id == Session.user_id))
128127

129128
def get_fallback_filter(self, term):
130-
return TestInformation.name.contains(term) | Error.message.contains(term)
129+
query = TestInformation.name.contains(term)
130+
if term == "starred" and current_user and current_user.is_authenticated:
131+
query = query | db.session.query(UserStarredTests).filter(UserStarredTests.user_id == current_user.id, UserStarredTests.test_id == Test.id).exists().correlate(Test)
132+
return query
131133

132134
@only_ops(['=', '!='])
133135
def search__subject(self, op, value): # pylint: disable=unused-argument
@@ -169,9 +171,9 @@ def search__label(self, op, value):
169171
subquery = db.session.query(session_label).filter(session_label.c.session_id == Test.session_id, session_label.c.label_id == labels[0].id).exists().correlate(Test)
170172
return _negate_maybe(op, subquery)
171173

172-
@only_ops(['~'])
174+
@only_ops(['~', '!~'])
173175
def search__error_message(self, op, value):
174-
return Error.message.contains(value)
176+
return _negate_maybe(op, Error.query.filter(Error.test_id == Test.id, Error.message.contains(value)).exists().correlate(Test))
175177

176178

177179

flask_app/search/syntax.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
_OPERATORS = {
1818
'~': lambda field, term: field.contains(term),
19+
'!~': lambda field, term: ~field.contains(term),
1920
'=': operator.eq,
2021
'!=': operator.ne,
2122
'<': operator.lt,

webapp/app/components/keyboard-shortcuts/component.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ export default Component.extend(KeyboardShortcuts, {
109109
element.typeahead("destroy");
110110
element.off();
111111
this.set("quick_search_open", false);
112-
this.set("help_displayed", false);
112+
this.get("display").set("show_help", false);
113113
},
114114

115115
_do_if_in(paths, callback) {
@@ -166,7 +166,7 @@ export default Component.extend(KeyboardShortcuts, {
166166
},
167167

168168
close_boxes_or_home() {
169-
if (this.get("quick_search_open") || this.get("help_displayed")) {
169+
if (this.get("quick_search_open") || this.get("display.show_help")) {
170170
this._close_boxes();
171171
} else {
172172
this._do_if_in(["sessions", "session.index"], function(controller) {
@@ -177,7 +177,7 @@ export default Component.extend(KeyboardShortcuts, {
177177
},
178178

179179
display_help() {
180-
this.set("help_displayed", true);
180+
this.get("display").set('show_help', true);
181181
},
182182

183183
goto_sessions() {
Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
import Component from '@ember/component';
2+
import { inject as service } from '@ember/service';
23

34
export default Component.extend({
4-
classNames: ["input-group"]
5+
classNames: ["input-group"],
6+
display: service(),
7+
actions: {
8+
toggleModal: function() {
9+
this.get("display").toggleProperty('show_help');
10+
}
11+
}
512
});

webapp/app/components/search-help/template.hbs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
<i class="fa fa-question-circle fa-2x faint clickable" {{action (toggle "show" this)}}></i>
1+
<i class="fa fa-question-circle fa-2x faint clickable" {{action "toggleModal"}}></i>
22

3-
{{#if show}}
3+
{{#if display.show_help}}
44

55
{{#modal-dialog
6-
close=(toggle "show" this)
6+
onClose="toggleModal"
77
targetAttachment="center"
88
translucentOverlay=true}}
99
<div class="container">
Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
import Component from '@ember/component';
22

33
export default Component.extend({
4-
is_starred: false,
4+
starred_object: null,
55
actions: {
66
toggle: function() {
7-
this.sendAction('toggle');
7+
let object = this.get('starred_object');
8+
return object.toggle_starred()
9+
.then(function() {
10+
return object.reload();
11+
});
812
},
913
},
1014
});
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
& {
2-
.starred {
3-
color: $backslash-orange;
4-
}
2+
display: inline-block;
3+
.starred {
4+
color: $backslash-orange;
5+
}
56
}
Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
{{#if is_starred}}
2-
<i class="fa fa-star add-margin-right starred" {{action "toggle"}}></i>
1+
{{#elements/tool-tip title=(if starred_object.is_starred "unstar test" "star test")}}
2+
{{#if starred_object.is_starred}}
3+
<i class="fa fa-star add-margin-right starred clickable" {{action "toggle"}}></i>
34
{{else}}
4-
<i class="fa fa-star-o fainter add-margin-right starred" {{action "toggle"}}></i>
5+
<i class="fa fa-star-o fainter add-margin-right starred clickable" {{action "toggle"}}></i>
56
{{/if}}
7+
{{/elements/tool-tip}}

webapp/app/components/test-item/component.js

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import Component from '@ember/component';
44

55
export default Component.extend({
66
display: service(),
7-
api: service(),
87
attributeBindings: ["href"],
98
tagName: "a",
109
classNames: ["item", "test", "clickable"],
@@ -27,14 +26,4 @@ export default Component.extend({
2726
}
2827
return returned;
2928
}.property("test"),
30-
actions: {
31-
toggle_starred: function() {
32-
let self = this;
33-
return this.get("api")
34-
.call("toggle_starred", { object_id: this.get("test.id") })
35-
.then(function() {
36-
return self.get('test').reload();
37-
});
38-
},
39-
}
4029
});

webapp/app/components/test-item/template.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
</div>
2323

2424
<div class="main-info">
25-
{{star-marker is_starred=test.is_starred toggle=(action "toggle_starred")}}
25+
{{star-marker starred_object=test}}
2626
{{status-icon status=test.computed_status session_model=session_model}}
2727
{{#if show_user}}
2828
{{#elements/tool-tip title=test.user_display_name}}

webapp/app/display/service.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ const _DEFAULTS = {
55
humanize_times: true,
66
comments_expanded: false,
77
show_side_labels: false,
8+
show_help: false,
89
session_side_bar_collapsed: false
910
};
1011

webapp/app/models/test.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import DS from "ember-data";
22
import HasLogicalId from "../mixins/has-logical-id";
33
import HasComputedStatus from "../mixins/has-computed-status";
4+
import { inject as service } from '@ember/service';
45

56
export default DS.Model.extend(HasLogicalId, HasComputedStatus, {
7+
api: service(),
68
session_display_id: DS.attr(),
79

810
has_any_error: function() {
@@ -61,5 +63,10 @@ export default DS.Model.extend(HasLogicalId, HasComputedStatus, {
6163
return this.get("status") === "RUNNING";
6264
}.property("status"),
6365

64-
is_session_abandoned: DS.attr("boolean")
66+
is_session_abandoned: DS.attr("boolean"),
67+
68+
toggle_starred: function() {
69+
return this.get("api")
70+
.call("toggle_starred", { object_id: this.get("id") });
71+
},
6572
});

webapp/app/session/index/route.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ export default Route.extend(
7171

7272
setupController: function(controller, model) {
7373
this._super(controller, model);
74+
controller.set("error", null);
7475
let parent_controller = this.controllerFor("session");
7576
parent_controller.set("test_filters", model.filters);
7677
controller.setProperties(model);

webapp/app/session/index/template.hbs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@
2323
<td><code>error_message ~ msg</code></td>
2424
<td>Find tests which failed with error message containing <code>msg</code></td>
2525
</tr>
26+
<tr>
27+
<td><code>starred</code></td>
28+
<td>Find tests which the current user marked as starred</td>
29+
</tr>
2630
</tbody>
2731
</table>
2832
{{/search-bar}}

webapp/app/session/test/controller.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import Controller from '@ember/controller';
55
export default Controller.extend({
66

77
runtime_config: service(),
8-
98
metadata_links: function() {
109
let returned = [];
1110
let metadata = this.get('test_metadata');

webapp/app/session/test/template.hbs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
<div class="container-fluid">
22
<h3>
3-
{{status-icon status=test_model.computed_status session_model=session_model spaced=false}} {{elements/copyable-text
4-
copy_value=(format-test-name test_model.info)
5-
value=(format-test-name test_model.info with_filename=false)}}
3+
{{star-marker starred_object=test_model}}
4+
{{status-icon status=test_model.computed_status session_model=session_model spaced=false}}
5+
{{elements/copyable-text copy_value=(format-test-name test_model.info) value=(format-test-name test_model.info with_filename=false)}}
66
</h3>
7-
7+
88
<small>from <strong>{{elements/copyable-text value=test_model.info.file_name}}</strong></small>
99

1010
{{#if (eq test_model.status "SKIPPED")}}

0 commit comments

Comments
 (0)