Date: Mon, 20 May 2019 11:24:18 +0100
Subject: [PATCH 12/53] checkboxes not working as hoped try again
---
weblab/static/js/run_experiment.js | 2 +-
weblab/templates/entities/entity_runexperiments.html | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/weblab/static/js/run_experiment.js b/weblab/static/js/run_experiment.js
index 285de69f0..d87e41f29 100644
--- a/weblab/static/js/run_experiment.js
+++ b/weblab/static/js/run_experiment.js
@@ -9,7 +9,7 @@ RunExperiment.prototype = {
});
$("#uncheckallbutton").click (function () {
$(".latestexperimentCheckBox").prop('checked', false);
- $(".experimentCheckBox").prop('checked', false);
+ $(".experimentCheckBox").prop('checked', false);
});
$("#checklatestbutton").click (function () {
$(".latestexperimentCheckBox").prop('checked', true);
diff --git a/weblab/templates/entities/entity_runexperiments.html b/weblab/templates/entities/entity_runexperiments.html
index 21cb79638..3759170ff 100644
--- a/weblab/templates/entities/entity_runexperiments.html
+++ b/weblab/templates/entities/entity_runexperiments.html
@@ -42,7 +42,7 @@ Your {{ other_type }}s
{% if entity_version.latest %}
-
+
{% else %}
{% endif %}
From 7e07e6fa81f22938cfd0b10f2e316af3c3449675 Mon Sep 17 00:00:00 2001
From: Sarah
Date: Mon, 20 May 2019 11:40:00 +0100
Subject: [PATCH 13/53] trying checkboxes again
---
weblab/static/js/run_experiment.js | 43 ++++++++++++++++++++++--------
1 file changed, 32 insertions(+), 11 deletions(-)
diff --git a/weblab/static/js/run_experiment.js b/weblab/static/js/run_experiment.js
index d87e41f29..66243677e 100644
--- a/weblab/static/js/run_experiment.js
+++ b/weblab/static/js/run_experiment.js
@@ -4,20 +4,41 @@ var RunExperiment = function() {};
RunExperiment.prototype = {
init: function() {
$("#checkallbutton").click (function () {
- $(".latestexperimentCheckBox").prop('checked', true);
- $(".experimentCheckBox").prop('checked', true);
- });
+ $(".latestexperimentCheckBox").each (function () {
+ if (!$(this).prop('checked')) {
+ $(this).prop('checked') == 'true'
+ }
+ });
+ $(".experimentCheckBox").each (function () {
+ if (!$(this).prop('checked')) {
+ $(this).prop('checked') == 'true'
+ }
+ });
+ });
$("#uncheckallbutton").click (function () {
- $(".latestexperimentCheckBox").prop('checked', false);
- $(".experimentCheckBox").prop('checked', false);
+ $(".latestexperimentCheckBox").each (function () {
+ if ($(this).prop('checked')) {
+ $(this).prop('checked') == 'false'
+ }
+ });
+ $(".experimentCheckBox").each (function () {
+ if ($(this).prop('checked')) {
+ $(this).prop('checked') == 'false'
+ }
+ });
});
$("#checklatestbutton").click (function () {
- $(".latestexperimentCheckBox").prop('checked', true);
- $(".experimentCheckBox").prop('checked', false);
- });
- $("#runexperimentsbutton").click (function () {
- // do something
- });
+ $(".latestexperimentCheckBox").each (function () {
+ if (!$(this).prop('checked')) {
+ $(this).prop('checked') == 'true'
+ }
+ });
+ $(".experimentCheckBox").each (function () {
+ if ($(this).prop('checked')) {
+ $(this).prop('checked') == 'false'
+ }
+ });
+ });
}
};
From 010f601aab537da97f4b3d9786dfb44e4f5be277 Mon Sep 17 00:00:00 2001
From: Sarah
Date: Mon, 20 May 2019 16:59:28 +0100
Subject: [PATCH 14/53] sorry changed context and forgot tests
---
weblab/entities/tests/test_views.py | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/weblab/entities/tests/test_views.py b/weblab/entities/tests/test_views.py
index 87b1a1dda..aa94f7600 100644
--- a/weblab/entities/tests/test_views.py
+++ b/weblab/entities/tests/test_views.py
@@ -1972,8 +1972,8 @@ def test_view_run_experiment_model(self, client, helpers, logged_in_user):
response = client.get('/entities/models/%d/runexperiments/' % model.pk)
assert response.status_code == 200
assert response.context['object_list'] == [{'id': 'myprotocol1',
- 'versions': [{'commit': commit2, 'tags': ['v1']},
- {'commit': commit1, 'tags': []}]},
+ 'versions': [{'commit': commit2, 'tags': ['v1'], 'latest': True},
+ {'commit': commit1, 'tags': [], 'latest': False}]},
]
assert response.context['preposition'] == 'under'
@@ -1986,8 +1986,8 @@ def test_view_run_experiment_protocol(self, client, helpers, logged_in_user):
response = client.get('/entities/protocols/%d/runexperiments/' % protocol.pk)
assert response.status_code == 200
assert response.context['object_list'] == [{'id': 'mymodel1',
- 'versions': [{'commit': commit2, 'tags': ['v1']},
- {'commit': commit1, 'tags': []}]},
+ 'versions': [{'commit': commit2, 'tags': ['v1'], 'latest': True},
+ {'commit': commit1, 'tags': [], 'latest': False}]},
]
assert response.context['preposition'] == 'on'
From b0f360fbd27bbba4e78629f6f6fb0c5df7aa22ad Mon Sep 17 00:00:00 2001
From: Sarah
Date: Tue, 21 May 2019 10:17:07 +0100
Subject: [PATCH 15/53] typo in comments
---
weblab/entities/views.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/weblab/entities/views.py b/weblab/entities/views.py
index a19f3d1fb..a262727f5 100644
--- a/weblab/entities/views.py
+++ b/weblab/entities/views.py
@@ -1032,7 +1032,7 @@ def get_context_data(self, **kwargs):
if entity.entity_type == 'protocol':
context['preposition'] = 'on'
- # ended up using a nested dict as nessed lists caused django's unpacking in forloops to
+ # ended up using a nested dict as nested lists caused django's unpacking in forloops to
# mess things up slightly
other_entities = Entity.objects.filter(entity_type=entity.other_type)
context['object_list'] = []
From 9f6a42729a9f62bdf104224725804c6b033ffb1b Mon Sep 17 00:00:00 2001
From: Sarah
Date: Tue, 21 May 2019 10:22:04 +0100
Subject: [PATCH 16/53] Try Jonathan's suggestion to sort checkboxes
---
weblab/static/js/run_experiment.js | 24 ++++++------------------
1 file changed, 6 insertions(+), 18 deletions(-)
diff --git a/weblab/static/js/run_experiment.js b/weblab/static/js/run_experiment.js
index 66243677e..25bc5ca9b 100644
--- a/weblab/static/js/run_experiment.js
+++ b/weblab/static/js/run_experiment.js
@@ -5,38 +5,26 @@ RunExperiment.prototype = {
init: function() {
$("#checkallbutton").click (function () {
$(".latestexperimentCheckBox").each (function () {
- if (!$(this).prop('checked')) {
- $(this).prop('checked') == 'true'
- }
+ $(this).prop('checked', true)
});
$(".experimentCheckBox").each (function () {
- if (!$(this).prop('checked')) {
- $(this).prop('checked') == 'true'
- }
+ $(this).prop('checked', true)
});
});
$("#uncheckallbutton").click (function () {
$(".latestexperimentCheckBox").each (function () {
- if ($(this).prop('checked')) {
- $(this).prop('checked') == 'false'
- }
+ $(this).prop('checked', false)
});
$(".experimentCheckBox").each (function () {
- if ($(this).prop('checked')) {
- $(this).prop('checked') == 'false'
- }
+ $(this).prop('checked', false)
});
});
$("#checklatestbutton").click (function () {
$(".latestexperimentCheckBox").each (function () {
- if (!$(this).prop('checked')) {
- $(this).prop('checked') == 'true'
- }
+ $(this).prop('checked', true)
});
$(".experimentCheckBox").each (function () {
- if ($(this).prop('checked')) {
- $(this).prop('checked') == 'false'
- }
+ $(this).prop('checked', false)
});
});
}
From 964d8d0f756e76e7f77526cd8a3cc9199916ecd8 Mon Sep 17 00:00:00 2001
From: Sarah
Date: Tue, 21 May 2019 10:39:32 +0100
Subject: [PATCH 17/53] Made EntityRunExperimentView also inherit
PermissionRequiredMixin
---
weblab/entities/views.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/weblab/entities/views.py b/weblab/entities/views.py
index a262727f5..78df8dc63 100644
--- a/weblab/entities/views.py
+++ b/weblab/entities/views.py
@@ -1015,10 +1015,11 @@ def get(self, request, *args, **kwargs):
})
-class EntityRunExperimentView(LoginRequiredMixin, EntityTypeMixin, DetailView):
+class EntityRunExperimentView(PermissionRequiredMixin, LoginRequiredMixin, EntityTypeMixin, DetailView):
"""
Class for listing the possible experiment combinations
"""
+ permission_required = 'experiments.create_experiment'
context_object_name = 'entity'
template_name = 'entities/entity_runexperiments.html'
From 00bb989d2b1b1b2b665f4a971bb3459f30a65498 Mon Sep 17 00:00:00 2001
From: Sarah
Date: Tue, 21 May 2019 10:40:41 +0100
Subject: [PATCH 18/53] start with latest versions checked
---
weblab/templates/entities/entity_runexperiments.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/weblab/templates/entities/entity_runexperiments.html b/weblab/templates/entities/entity_runexperiments.html
index 3759170ff..7dafa151d 100644
--- a/weblab/templates/entities/entity_runexperiments.html
+++ b/weblab/templates/entities/entity_runexperiments.html
@@ -42,7 +42,7 @@ Your {{ other_type }}s
{% if entity_version.latest %}
-
+
{% else %}
{% endif %}
From 6f1019f70e7240b8a53a1cbe8616ef799beb3761 Mon Sep 17 00:00:00 2001
From: Sarah
Date: Tue, 21 May 2019 18:11:31 +0100
Subject: [PATCH 19/53] update tests for adding permission to run experiment
view
---
weblab/entities/tests/test_views.py | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/weblab/entities/tests/test_views.py b/weblab/entities/tests/test_views.py
index aa94f7600..c15002a32 100644
--- a/weblab/entities/tests/test_views.py
+++ b/weblab/entities/tests/test_views.py
@@ -1970,7 +1970,8 @@ def test_view_run_experiment_model(self, client, helpers, logged_in_user):
protocol.add_tag('v1', commit2.hexsha)
response = client.get('/entities/models/%d/runexperiments/' % model.pk)
- assert response.status_code == 200
+ assert response.status_code == 302
+ assert '/login/' in response.url
assert response.context['object_list'] == [{'id': 'myprotocol1',
'versions': [{'commit': commit2, 'tags': ['v1'], 'latest': True},
{'commit': commit1, 'tags': [], 'latest': False}]},
@@ -1984,7 +1985,8 @@ def test_view_run_experiment_protocol(self, client, helpers, logged_in_user):
model.add_tag('v1', commit2.hexsha)
protocol = recipes.protocol.make(author=logged_in_user)
response = client.get('/entities/protocols/%d/runexperiments/' % protocol.pk)
- assert response.status_code == 200
+ assert response.status_code == 302
+ assert '/login/' in response.url
assert response.context['object_list'] == [{'id': 'mymodel1',
'versions': [{'commit': commit2, 'tags': ['v1'], 'latest': True},
{'commit': commit1, 'tags': [], 'latest': False}]},
From b56a372c034a57660f85fe2b45e1f6afa99df7c2 Mon Sep 17 00:00:00 2001
From: Sarah
Date: Wed, 22 May 2019 09:29:55 +0100
Subject: [PATCH 20/53] try again with tests - my local setup is clearly not
completely accurate :-(
---
weblab/entities/tests/test_views.py | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/weblab/entities/tests/test_views.py b/weblab/entities/tests/test_views.py
index c15002a32..9092a1509 100644
--- a/weblab/entities/tests/test_views.py
+++ b/weblab/entities/tests/test_views.py
@@ -1963,6 +1963,7 @@ def test_nonexistent_entity_generates_404_for_user(self, client, logged_in_user,
@pytest.mark.django_db
class TestEntityRunExperiment:
def test_view_run_experiment_model(self, client, helpers, logged_in_user):
+ helpers.add_permission(logged_in_user, 'create_experiment')
model = recipes.model.make(author=logged_in_user)
protocol = recipes.protocol.make(author=logged_in_user)
commit1 = helpers.add_version(protocol, visibility='public')
@@ -1970,8 +1971,8 @@ def test_view_run_experiment_model(self, client, helpers, logged_in_user):
protocol.add_tag('v1', commit2.hexsha)
response = client.get('/entities/models/%d/runexperiments/' % model.pk)
- assert response.status_code == 302
- assert '/login/' in response.url
+# assert response.status_code == 302
+# assert '/login/' in response.url
assert response.context['object_list'] == [{'id': 'myprotocol1',
'versions': [{'commit': commit2, 'tags': ['v1'], 'latest': True},
{'commit': commit1, 'tags': [], 'latest': False}]},
@@ -1979,6 +1980,7 @@ def test_view_run_experiment_model(self, client, helpers, logged_in_user):
assert response.context['preposition'] == 'under'
def test_view_run_experiment_protocol(self, client, helpers, logged_in_user):
+ helpers.add_permission(logged_in_user, 'create_experiment')
model = recipes.model.make(author=logged_in_user)
commit1 = helpers.add_version(model, visibility='public')
commit2 = helpers.add_version(model, visibility='public')
From 3718b9401f810f64bb78e5b45bb2981129a0b054 Mon Sep 17 00:00:00 2001
From: Sarah
Date: Wed, 22 May 2019 09:58:22 +0100
Subject: [PATCH 21/53] think I've got it- sorted the tests for permissions on
runExperiment
---
weblab/entities/tests/test_views.py | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/weblab/entities/tests/test_views.py b/weblab/entities/tests/test_views.py
index 9092a1509..4795ba9aa 100644
--- a/weblab/entities/tests/test_views.py
+++ b/weblab/entities/tests/test_views.py
@@ -1963,7 +1963,7 @@ def test_nonexistent_entity_generates_404_for_user(self, client, logged_in_user,
@pytest.mark.django_db
class TestEntityRunExperiment:
def test_view_run_experiment_model(self, client, helpers, logged_in_user):
- helpers.add_permission(logged_in_user, 'create_experiment')
+ helpers.add_permission(logged_in_user, 'create_experiment', Experiment)
model = recipes.model.make(author=logged_in_user)
protocol = recipes.protocol.make(author=logged_in_user)
commit1 = helpers.add_version(protocol, visibility='public')
@@ -1971,8 +1971,7 @@ def test_view_run_experiment_model(self, client, helpers, logged_in_user):
protocol.add_tag('v1', commit2.hexsha)
response = client.get('/entities/models/%d/runexperiments/' % model.pk)
-# assert response.status_code == 302
-# assert '/login/' in response.url
+ assert response.status_code == 200
assert response.context['object_list'] == [{'id': 'myprotocol1',
'versions': [{'commit': commit2, 'tags': ['v1'], 'latest': True},
{'commit': commit1, 'tags': [], 'latest': False}]},
@@ -1980,15 +1979,14 @@ def test_view_run_experiment_model(self, client, helpers, logged_in_user):
assert response.context['preposition'] == 'under'
def test_view_run_experiment_protocol(self, client, helpers, logged_in_user):
- helpers.add_permission(logged_in_user, 'create_experiment')
+ helpers.add_permission(logged_in_user, 'create_experiment', Experiment)
model = recipes.model.make(author=logged_in_user)
commit1 = helpers.add_version(model, visibility='public')
commit2 = helpers.add_version(model, visibility='public')
model.add_tag('v1', commit2.hexsha)
protocol = recipes.protocol.make(author=logged_in_user)
response = client.get('/entities/protocols/%d/runexperiments/' % protocol.pk)
- assert response.status_code == 302
- assert '/login/' in response.url
+ assert response.status_code == 200
assert response.context['object_list'] == [{'id': 'mymodel1',
'versions': [{'commit': commit2, 'tags': ['v1'], 'latest': True},
{'commit': commit1, 'tags': [], 'latest': False}]},
From 75db07d89a7c0952ee84a4f056cfa4cfdbc34dbb Mon Sep 17 00:00:00 2001
From: Sarah
Date: Wed, 22 May 2019 10:17:06 +0100
Subject: [PATCH 22/53] tag should be outside for loop
---
weblab/templates/entities/entity_runexperiments.html | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/weblab/templates/entities/entity_runexperiments.html b/weblab/templates/entities/entity_runexperiments.html
index 7dafa151d..00951ed7c 100644
--- a/weblab/templates/entities/entity_runexperiments.html
+++ b/weblab/templates/entities/entity_runexperiments.html
@@ -35,9 +35,9 @@ Your {{ other_type }}s
{% for entity_object in object_list %}
{{ entity_object.id }}
-
+
{% for entity_version in entity_object.versions %}
-