Check the selenium console log for any issues as part of the test suite,
and fix/suppress errors found by that. - Legacy-Id: 19916
This commit is contained in:
parent
1795609816
commit
37cb737987
|
@ -261,7 +261,6 @@ window.agenda_filter_for_testing; // methods to be accessed for automated testin
|
|||
function register_handlers() {
|
||||
$('.pickview')
|
||||
.on("click", function () {
|
||||
console.log("pickview");
|
||||
if (is_disabled($(this))) { return; }
|
||||
var fp = handle_pick_button($(this));
|
||||
update_filters(fp);
|
||||
|
|
|
@ -1 +1 @@
|
|||
import "bootstrap-datepicker";
|
||||
import "bootstrap-datepicker/js/bootstrap-datepicker.js";
|
|
@ -497,7 +497,7 @@ jQuery(document).ready(function () {
|
|||
let originRadio = updateSwapRadios(swapDaysLabels, swapDaysRadios, originDay, 'day');
|
||||
|
||||
// Fill in label in the modal title
|
||||
swapDaysModal.find(".modal-title .day").text(jQuery.trim(originRadio.parent().text()));
|
||||
swapDaysModal.find(".modal-title .day").text(originRadio.parent().text().trim());
|
||||
|
||||
// Fill in the hidden form fields
|
||||
swapDaysModal.find("input[name=source_day]").val(originDay);
|
||||
|
|
|
@ -19,6 +19,7 @@ $.fn.select2.defaults.set("escapeMarkup", function (m) {
|
|||
window.setupSelect2Field = function (e) {
|
||||
var url = e.data("ajax--url");
|
||||
var maxEntries = e.data("max-entries");
|
||||
var result_key = e.data("result-key");
|
||||
var options = e.data("pre");
|
||||
for (var id in options) {
|
||||
e.append(new Option(options[id].text, options[id].id, false, options[id].selected));
|
||||
|
@ -38,6 +39,10 @@ window.setupSelect2Field = function (e) {
|
|||
};
|
||||
},
|
||||
processResults: function (results) {
|
||||
if (result_key) {
|
||||
// overwrite the returned "id" fields with the data in the result_key fields
|
||||
results = results.map(x => ({ ...x, ...{ id: x[result_key] } }));
|
||||
}
|
||||
return {
|
||||
results: results,
|
||||
pagination: {
|
||||
|
|
|
@ -1,31 +1,32 @@
|
|||
$(function () {
|
||||
var form = $(".new-relation-row")
|
||||
.closest("form");
|
||||
var newRowHtml = form.find(".new-relation-row")
|
||||
.get(0)
|
||||
.outerHTML;
|
||||
var counter = 1;
|
||||
$(document)
|
||||
.ready(function () {
|
||||
var form = $(".new-relation-row")
|
||||
.closest("form");
|
||||
var newRowHtml = form.find(".new-relation-row")
|
||||
.get(0)
|
||||
.outerHTML;
|
||||
var counter = 1;
|
||||
|
||||
form.on("click", ".delete", function (e) {
|
||||
e.preventDefault();
|
||||
$(this)
|
||||
.closest(".input-group")
|
||||
.remove();
|
||||
});
|
||||
form.on("click", ".delete", function (e) {
|
||||
e.preventDefault();
|
||||
$(this)
|
||||
.closest(".input-group")
|
||||
.remove();
|
||||
});
|
||||
|
||||
form.on("keydown", ".new-relation-row input[type=text]", function () {
|
||||
var top = $(this)
|
||||
.closest(".new-relation-row");
|
||||
top.removeClass("new-relation-row");
|
||||
top.find(".delete")
|
||||
.removeAttr('Disabled')
|
||||
.removeClass("btn-outline-danger")
|
||||
.addClass("btn-danger");
|
||||
top.find("input,select")
|
||||
.each(function () {
|
||||
this.name += counter;
|
||||
});
|
||||
++counter;
|
||||
top.after(newRowHtml);
|
||||
});
|
||||
});
|
||||
form.on("keydown", ".new-relation-row input[type=text]", function () {
|
||||
var top = $(this)
|
||||
.closest(".new-relation-row");
|
||||
top.removeClass("new-relation-row");
|
||||
top.find(".delete")
|
||||
.prop('Disabled', false)
|
||||
.removeClass("btn-outline-danger")
|
||||
.addClass("btn-danger");
|
||||
top.find("input,select")
|
||||
.each(function () {
|
||||
this.name += counter;
|
||||
});
|
||||
++counter;
|
||||
top.after(newRowHtml);
|
||||
});
|
||||
});
|
|
@ -213,7 +213,7 @@ timeslotEdit = (function () {
|
|||
|
||||
let timeslotElts = Array.from(deleteModal.eltsToDelete); // make own copy as Array so we have .map()
|
||||
ajaxDeleteTimeSlot(timeslotElts.map(elt => elt.dataset.timeslotPk))
|
||||
.error(function (jqXHR) {
|
||||
.fail(function (jqXHR) {
|
||||
displayError('Error deleting timeslot: ' + jqXHR.responseText);
|
||||
})
|
||||
.done(function () {
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
<div class="row mb-3">
|
||||
<label for="url1" class="col-form-label col-sm-2 fw-bold">From revision</label>
|
||||
<div class="col-sm-10">
|
||||
<select class="form-select" id="url1" name="url1">
|
||||
<select class="form-select select2-field" data-max-entries="1" data-minimum-input-length="0" id="url1" name="url1">
|
||||
{% for name, rev, time, url in diff_revisions %}
|
||||
<option value="{{ url }}"
|
||||
{% if diff_revisions|length > 1 and forloop.counter == 2 %} selected="selected"{% endif %}>
|
||||
|
@ -46,7 +46,7 @@
|
|||
<div class="row mb-3">
|
||||
<label for="url2" class="col-form-label col-sm-2 fw-bold">To revision</label>
|
||||
<div class="col-sm-10">
|
||||
<select class="form-select" id="url2" name="url2">
|
||||
<select class="form-select select2-field" data-max-entries="1" data-minimum-input-length="0" id="url2" name="url2">
|
||||
{% for name, rev, time, url in diff_revisions %}
|
||||
<option value="{{ url }}"
|
||||
{% if forloop.counter == 1 %} selected="selected"{% endif %}>
|
||||
|
|
|
@ -3,10 +3,17 @@
|
|||
{% origin %}
|
||||
{% for rfc,choice_slug in form.relations.items %}
|
||||
<div class="input-group mb-3">
|
||||
<input class="form-control"
|
||||
name="new_relation_row_{{ rfc }}"
|
||||
type="text"
|
||||
value="{{ rfc }}">
|
||||
<select class="form-control select2-field"
|
||||
data-ajax--url="{% url 'ietf.doc.views_search.ajax_select2_search_docs' model_name='document' doc_type='draft' %}"
|
||||
data-max-entries="1"
|
||||
data-width="resolve"
|
||||
data-result-key="text"
|
||||
name="new_relation_row_{{ rfc }}"
|
||||
data-placeholder="Enter new affected RFC.">
|
||||
<option id="{{ rfc|upper }}" selected>
|
||||
{{ rfc|upper }}
|
||||
</option>
|
||||
</select>
|
||||
<select class="form-select" name="statchg_relation_row_{{ rfc }}">
|
||||
<option value="" {% if choice_slug == "" %}selected{% endif %}>
|
||||
(None)
|
||||
|
@ -22,10 +29,14 @@
|
|||
</div>
|
||||
{% endfor %}
|
||||
<div class="input-group mb-3 new-relation-row">
|
||||
<input name="new_relation_row_"
|
||||
type="text"
|
||||
class="form-control"
|
||||
placeholder="Enter new affected RFC.">
|
||||
<select name="new_relation_row_"
|
||||
class="form-control select2-field"
|
||||
data-ajax--url="{% url 'ietf.doc.views_search.ajax_select2_search_docs' model_name='document' doc_type='draft' %}"
|
||||
data-result-key="text"
|
||||
data-max-entries="1"
|
||||
data-width="resolve"
|
||||
data-placeholder="Enter new affected RFC.">
|
||||
</select>
|
||||
<select class="form-select" name="statchg_relation_row_">
|
||||
<option value="" {% if choice_slug == "" %}selected{% endif %}>
|
||||
(Select proposed new status.)
|
||||
|
|
|
@ -369,9 +369,9 @@
|
|||
if (!weekview.hasClass('visually-hidden')) {
|
||||
var queryparams = window.location.search;
|
||||
if (queryparams) {
|
||||
queryparams += '&tz=' + ietf_timezone.get_current_tz().toLowerCase();
|
||||
queryparams += '&tz=' + encodeURI(ietf_timezone.get_current_tz().toLowerCase());
|
||||
} else {
|
||||
queryparams = '?tz=' + ietf_timezone.get_current_tz().toLowerCase();
|
||||
queryparams = '?tz=' + encodeURI(ietf_timezone.get_current_tz().toLowerCase());
|
||||
}
|
||||
var new_url = 'week-view.html' + queryparams;
|
||||
var wv_iframe = $(weekview).children('iframe');
|
||||
|
|
|
@ -13,11 +13,18 @@
|
|||
{% csrf_token %}
|
||||
<div class="mb-3">
|
||||
<label class="form-label">I-D name</label>
|
||||
<input type="text"
|
||||
class="form-control"
|
||||
placeholder="draft-..."
|
||||
name="name"
|
||||
value="{{ name|default:"" }}">
|
||||
<select class="form-control select2-field"
|
||||
data-placeholder="draft-..."
|
||||
data-ajax--url="{% url 'ietf.doc.views_search.ajax_select2_search_docs' model_name='document' doc_type='draft' %}"
|
||||
data-max-entries="1"
|
||||
data-result-key="text"
|
||||
name="name">
|
||||
{% if name %}
|
||||
<option id="{{ name }}" selected>
|
||||
{{ name }}
|
||||
</option>
|
||||
{% endif %}
|
||||
</select>
|
||||
</div>
|
||||
{% if error %}
|
||||
<p class="alert alert-danger my-3">
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
# Copyright The IETF Trust 2014-2021, All Rights Reserved
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import re
|
||||
|
||||
from django.urls import reverse as urlreverse
|
||||
from unittest import skipIf
|
||||
|
||||
|
@ -12,6 +14,7 @@ try:
|
|||
from selenium.webdriver.chrome.options import Options
|
||||
from selenium.webdriver.common.action_chains import ActionChains
|
||||
from selenium.webdriver.common.by import By
|
||||
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
|
||||
except ImportError as e:
|
||||
skip_selenium = True
|
||||
skip_message = "Skipping selenium tests: %s" % e
|
||||
|
@ -38,10 +41,12 @@ def start_web_driver():
|
|||
options.add_argument("disable-extensions")
|
||||
options.add_argument("disable-gpu") # headless needs this
|
||||
options.add_argument("no-sandbox") # docker needs this
|
||||
dc = DesiredCapabilities.CHROME
|
||||
dc["goog:loggingPrefs"] = {"browser": "ALL"}
|
||||
# For selenium 3:
|
||||
return webdriver.Chrome("chromedriver", options=options)
|
||||
return webdriver.Chrome("chromedriver", options=options, desired_capabilities=dc)
|
||||
# For selenium 4:
|
||||
# return webdriver.Chrome(service=service, options=options)
|
||||
# return webdriver.Chrome(service=service, options=options, desired_capabilities=dc)
|
||||
|
||||
|
||||
def selenium_enabled():
|
||||
|
@ -63,6 +68,24 @@ class IetfSeleniumTestCase(IetfLiveServerTestCase):
|
|||
self.driver.set_window_size(1024,768)
|
||||
|
||||
def tearDown(self):
|
||||
for type in ["browser", "driver"]:
|
||||
log = self.driver.get_log(type)
|
||||
if not log:
|
||||
continue
|
||||
for entry in log:
|
||||
msg = entry["message"]
|
||||
# suppress a bunch of benign/expected messages
|
||||
if (
|
||||
re.search(r"JQMIGRATE: Migrate is installed", msg)
|
||||
or re.search(r"No headers fields visible, hiding", msg)
|
||||
or re.search(r"No color for \w+: using default", msg)
|
||||
or re.search(r"Invalid 'X-Frame-Options'", msg)
|
||||
or re.search(r"Could not find parent", msg)
|
||||
or re.search(r"Enabling nav", msg)
|
||||
or re.search(r"/materials/.*mars.*status of 404", msg)
|
||||
):
|
||||
continue
|
||||
self.test.assertEqual("", msg)
|
||||
super(IetfSeleniumTestCase, self).tearDown()
|
||||
self.driver.close()
|
||||
|
||||
|
@ -98,4 +121,4 @@ class presence_of_element_child_by_css_selector:
|
|||
|
||||
def __call__(self, driver):
|
||||
child = self.element.find_element(By.CSS_SELECTOR, self.child_selector)
|
||||
return child if child is not None else False
|
||||
return child if child is not None else False
|
7382
package-lock.json
generated
7382
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -4,7 +4,7 @@
|
|||
"@fullcalendar/daygrid": "^5.10.1",
|
||||
"@popperjs/core": "^2.10.2",
|
||||
"bootstrap": "^5.1.3",
|
||||
"bootstrap-datepicker": "^1.9.0",
|
||||
"bootstrap-datepicker": "uxsolutions/bootstrap-datepicker",
|
||||
"bootstrap-icons": "^1.7.0",
|
||||
"d3": "^3.5.17",
|
||||
"flot": "^4.2.2",
|
||||
|
|
Loading…
Reference in a new issue