diff --git a/.gitignore b/.gitignore index 31e6bcf64793e49a455deb9a98122f93eb3394e0..6eddb66f8da3af4b77f0af2c82e08aed03316bc9 100755 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ VIPSWeb/local_settings.py .project .pydevproject *.pyc +geckodriver.log VIPSWeb/static/admin VIPSWeb/static/test/2012-02-10.kml VIPSWeb/static/test/2012-02-10.kml~ diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000000000000000000000000000000000000..58c087b07377e369ba0f53d81cd05fe829630be9 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,36 @@ +node { + + try { + stage('Checkout') { + checkout scm + } + stage('Test'){ + sh """ + virtualenv --python=python2.7 env + . env/bin/activate + pip install -r requirements.txt + pip install selenium + cp VIPSWeb/local_settings_sample.py VIPSWeb/local_settings.py + ./manage.py collectstatic + ./manage.py runserver & + ./manage.py test + + """ + } + stage ('Build') { + + } + + } + + catch (err) { + + throw err + } + + finally { + sh """ + rm -rf static + """ + } +} diff --git a/VIPSWeb/local_settings_sample.py b/VIPSWeb/local_settings_sample.py index e87634e2e1f4944d2f77f1e99da15004921dd4dc..f3a9f02d63313278c05f4e7bd5b95a66c6ced80e 100755 --- a/VIPSWeb/local_settings_sample.py +++ b/VIPSWeb/local_settings_sample.py @@ -32,7 +32,7 @@ MAINTENANCE_MODE = False # Hosts/domain names that are valid for this site; required if DEBUG is False # See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts -ALLOWED_HOSTS = ["www.example.com"] +ALLOWED_HOSTS = ["localhost"] SITE_ROOT = os.path.dirname(os.path.realpath(__file__)) @@ -41,7 +41,7 @@ SITE_ROOT = os.path.dirname(os.path.realpath(__file__)) # in apps' "static/" subdirectories and in STATICFILES_DIRS. # Example: "/var/www/example.com/static/" # Use 'python manage.py collectstatic' to put stuff into here -STATIC_ROOT = '/somewhere/VIPSWeb/static' +STATIC_ROOT = SITE_ROOT + '/../static/' # Make this unique, and don't share it with anybody. SECRET_KEY = '#### HIDDEN ###' @@ -113,7 +113,7 @@ GOOGLE_ANALYTICS_SCRIPT = """ # The server name used for VIPSLogic VIPSLOGIC_SERVER_NAME = "vipslogic" # VIPSLogic protocol -VIPSLOGIC_PROTOCOL = "https" +VIPSLOGIC_PROTOCOL = "http" # This organization's ID in VIPSLogic/CoreManager VIPS_ORGANIZATION_ID = 1 # Use this if you want to override and show icons for stations belonging to several organizations diff --git a/VIPSWeb/static/js/frontpage.js b/VIPSWeb/static/js/frontpage.js index 78de50b2747aea80c99f82189dc44b2877eedabb..79d08d07d63e8b326322c1beecfbfc63e8afa567 100755 --- a/VIPSWeb/static/js/frontpage.js +++ b/VIPSWeb/static/js/frontpage.js @@ -533,7 +533,8 @@ var cachedPois; function cacheForecastSummaries() { //$.getJSON(settings.vipslogicProtocol + "://" + settings.vipslogicServerName + "/rest/forecastconfigurationsummaries/" + settings.vipsOrganizationId, function( json ) { - $.getJSON( "/vipslogicproxy/rest/forecastconfigurationsummaries/" + settings.vipsOrganizationId + (settings.userUuid != null ? "?userUuid=" + settings.userUuid : ""), function( json ) { + $.getJSON( "/vipslogicproxy/rest/forecastconfigurationsummaries/" + settings.vipsOrganizationId + "?foo=bar" + (settings.userUuid != null ? "&userUuid=" + settings.userUuid : "") + + (settings.includeOrganizationIds != null ? "&includeOrganizationIds=" + settings.includeOrganizationIds.join(",") : ""), function( json ) { cachedForecastSummaries = json; cachePrivateForecastSummaries(); @@ -702,9 +703,10 @@ function getForecastSummariesForPoi(poiId) { var retVal = []; var selectedCropIds = getSelectedCropIds(); - for(var i in cachedForecastSummaries) + var allForecastSummaries = cachedForecastSummaries.concat(cachedPrivateForecastSummaries); + for(var i in allForecastSummaries) { - var forecastSummary = cachedForecastSummaries[i]; + var forecastSummary = allForecastSummaries[i]; if(forecastSummary.cropOrganismId == null || selectedCropIds.indexOf(forecastSummary.cropOrganismId.organismId) < 0) { continue; diff --git a/VIPSWeb/static/js/frontpageMap.js b/VIPSWeb/static/js/frontpageMap.js index 668d29c0bd7247d9323b079b2a98ec3a1b0ce0b6..7265fec76d446ecfe5091ec8ec2aea9f09ebad9a 100755 --- a/VIPSWeb/static/js/frontpageMap.js +++ b/VIPSWeb/static/js/frontpageMap.js @@ -410,10 +410,14 @@ function updateForecastLayers() //url: settings.vipslogicProtocol + "://" + settings.vipslogicServerName + "/rest/forecastresults/aggregate/" + settings.vipsOrganizationId + "?" + cropCategoryIdStr, url: "/vipslogicproxy/rest/forecastresults/aggregate/" + ( - settings.forecastMapOrganizationIds != null && settings.forecastMapOrganizationIds.length > 0 ? - "orgspan?organizationId=" + settings.forecastMapOrganizationIds.join("&organizationId=") + cropCategoryIdStr + settings.includeOrganizationIds != null && settings.includeOrganizationIds.length > 0 ? + "orgspan?organizationId=" + settings.includeOrganizationIds.join("&organizationId=") + cropCategoryIdStr : settings.vipsOrganizationId + "?" + cropCategoryIdStr ) + + + ( + settings.userUuid != null ? "&userUUID=" + settings.userUuid : "" + ) , format: new ol.format.KML(), projection: ol.proj.get('EPSG:3857') @@ -433,21 +437,22 @@ var renderObservationFeatures = function(){ var geoJSON = {"type":"FeatureCollection","features":[]}; for(var i=0;i<filteredObservations.length;i++) { - var observation = filteredObservations[i]; - var obsFeatures = null; - if(!observation.locationIsPrivate && observation.geoInfo !== null && observation.geoInfo.trim() !== "") - { - obsFeatures = JSON.parse(observation.geoInfo).features; - } - else - { - continue; - } - - for(var j=0; j<obsFeatures.length; j++) - { - geoJSON.features.push(obsFeatures[j]); - } + var observation = filteredObservations[i]; + var obsFeatures = null; + if(!observation.locationIsPrivate && observation.geoInfo !== null && observation.geoInfo.trim() !== "") + { + obsFeatures = JSON.parse(observation.geoInfo).features; + } + else + { + continue; + } + + for(var j=0; j<obsFeatures.length; j++) + { + geoJSON.features.push(obsFeatures[j]); + } + } var format = new ol.format.GeoJSON(); diff --git a/VIPSWeb/templates/settings.js b/VIPSWeb/templates/settings.js index ad804db9dafb8e555f4e6ce0e7ae59d27a27cc00..611638dd658c17665d63bc2d3cd5107eaf1bfe92 100755 --- a/VIPSWeb/templates/settings.js +++ b/VIPSWeb/templates/settings.js @@ -25,7 +25,7 @@ var settings = { vipslogicProtocol: "{{settings.VIPSLOGIC_PROTOCOL}}", vipsCoremanagerServerName : "{{settings.VIPSCOREMANAGER_SERVER_NAME}}", - forecastMapOrganizationIds: {% if settings.FORECAST_MAP_ORGANIZATION_IDS == None %}null{%else%}{{settings.FORECAST_MAP_ORGANIZATION_IDS}}{%endif%}, + includeOrganizationIds: {% if settings.INCLUDE_ORGANIZATION_IDS == None %}null{%else%}{{settings.INCLUDE_ORGANIZATION_IDS}}{%endif%}, mapZoomlevel: {{settings.MAP_ZOOMLEVEL}}, diff --git a/VIPSWeb/test.py b/VIPSWeb/test.py new file mode 100644 index 0000000000000000000000000000000000000000..cc1c5a96702b086f4dad4aa69b913772186f3c5a --- /dev/null +++ b/VIPSWeb/test.py @@ -0,0 +1,23 @@ +from django.test import TestCase +import unittest +from selenium import webdriver +from selenium.webdriver.firefox.options import Options + +options = Options() +options.headless = True + +#Test suit +class SearchText(unittest.TestCase): + def setUp(self): + self.driver = webdriver.Firefox(options=options) + self.driver.implicitly_wait(10) + self.driver.get("http://localhost:8000") + + def test_maintenance_mode(self): + assert "Site down for maintenance" in self.driver.page_source + + def tearDown(self): + self.driver.quit() + +if __name__ == '__main__': + unittest.main() diff --git a/forecasts/models.py b/forecasts/models.py index 42b2a96cab7beb4e6fcfe80be392babbc3adf05b..fb83dbe6d5d46cc2580de2e85f9f44320548b5ab 100755 --- a/forecasts/models.py +++ b/forecasts/models.py @@ -230,24 +230,44 @@ class ForecastConfiguration: for crop_organism_id in crop_organism_ids: crop_organism_id_paramstring += "&cropOrganismId=%s" % crop_organism_id - print "%s://%s/rest/organizationforecastconfigurations/%s?from=%s-01-01&to=%s-12-31%s" % ( - settings.VIPSLOGIC_PROTOCOL, - settings.VIPSLOGIC_SERVER_NAME, - settings.VIPS_ORGANIZATION_ID, - season, - season, - crop_organism_id_paramstring - ) - - request_result = requests.get("%s://%s/rest/organizationforecastconfigurations/%s?from=%s-01-01&to=%s-12-31%s" % ( - settings.VIPSLOGIC_PROTOCOL, - settings.VIPSLOGIC_SERVER_NAME, - settings.VIPS_ORGANIZATION_ID, - season, - season, - crop_organism_id_paramstring - ) - ) + request_result = None + if settings.INCLUDE_ORGANIZATION_IDS == None or len(settings.INCLUDE_ORGANIZATION_IDS) == 1: + """print "%s://%s/rest/organizationforecastconfigurations/%s?from=%s-01-01&to=%s-12-31%s" % ( + settings.VIPSLOGIC_PROTOCOL, + settings.VIPSLOGIC_SERVER_NAME, + settings.VIPS_ORGANIZATION_ID, + season, + season, + crop_organism_id_paramstring + )""" + + request_result = requests.get("%s://%s/rest/organizationforecastconfigurations/%s?from=%s-01-01&to=%s-12-31%s" % ( + settings.VIPSLOGIC_PROTOCOL, + settings.VIPSLOGIC_SERVER_NAME, + settings.VIPS_ORGANIZATION_ID, + season, + season, + crop_organism_id_paramstring + ) + ) + else: + """print "%s://%s/rest/forecastconfigurationsincludeorgs/%s?includeOrganizationIds=%s&from=%s-01-01&to=%s-12-31" % ( + settings.VIPSLOGIC_PROTOCOL, + settings.VIPSLOGIC_SERVER_NAME, + settings.VIPS_ORGANIZATION_ID, + ",".join(str(x) for x in settings.INCLUDE_ORGANIZATION_IDS), + season, + season + )""" + request_result = requests.get("%s://%s/rest/forecastconfigurationsincludeorgs/%s?includeOrganizationIds=%s&from=%s-01-01&to=%s-12-31" % ( + settings.VIPSLOGIC_PROTOCOL, + settings.VIPSLOGIC_SERVER_NAME, + settings.VIPS_ORGANIZATION_ID, + ",".join(str(x) for x in settings.INCLUDE_ORGANIZATION_IDS), + season, + season + ) + ) return request_result @staticmethod diff --git a/forecasts/views.py b/forecasts/views.py index 400eff6c7e8b0d68fa164bedf149c14a3e62fbee..d1edf5083527ffa38aae36a770e788667adaf9cc 100755 --- a/forecasts/views.py +++ b/forecasts/views.py @@ -32,6 +32,7 @@ def index(request): season_range = range(2016, datetime.now().year + 1) season = int(request.GET.get("season", (datetime.now() + relativedelta(months = settings.SYSTEM_TIME_OFFSET_MONTHS)).year)) forecast_configurations = ForecastConfiguration.get_forecast_configurations_from_vipslogic(None, season).text + #print forecast_configurations private_forecast_configurations = None if request.session.get("user_uuid",None) != None: private_forecast_configurations = ForecastConfiguration.get_private_forecast_configurations(request.session["user_uuid"]) diff --git a/fusarium/templates/fusarium/oat_flowering.html b/fusarium/templates/fusarium/oat_flowering.html index 9e9bf95409c33e88e9c7a45d0d4e016d275cb724..39b537a3f40762b139a63847df815bfe34b39593 100755 --- a/fusarium/templates/fusarium/oat_flowering.html +++ b/fusarium/templates/fusarium/oat_flowering.html @@ -10,7 +10,7 @@ <p> Her kan du beregne tidspunkt for når havren er i blomst og dermed når en eventuell behandling med soppmiddel mot Fusarium må utføres. - <a href='http://gamlevips.nibio.no/information/if105s.jsp?HTTP_REFERRER=/information/if105s.jsp&BUTTON=kapittel&menyValg=4#blomstringsmodell_havre' target='new'>Les mer</a> + <a href='/forecasts/models/OATFLOWERM/' target='new'>Les mer</a> </p> <div id="oatFloweringModelForm" style="width:100%"></div> <div id="oatFloweringModelResults" style="width:100%;"></div> diff --git a/mock/templates/mock/zymogridmapclient.html b/mock/templates/mock/zymogridmapclient.html index da8c0ff901205bf23b590deeb0ad04c02b3083eb..9daaf2c43bbf2a77e1fce3850e3393a9dc3350dc 100644 --- a/mock/templates/mock/zymogridmapclient.html +++ b/mock/templates/mock/zymogridmapclient.html @@ -15,14 +15,17 @@ <h1>Let's say this is the EuroWheat web page</h1> <p>What you do is that you include the following code in your HTML</p> <code> - <div id="nordicSeptoriaMapContainer" style="width:800px;" data-language="dk"></div><br/> + <div id="nordicSeptoriaMapContainer" style="width:800px;" data-language="dk" data-mainmap-height="700px;"></div><br/> <script id="nordicSeptoriaMapScript" type="text/javascript" src="{{settings.VIPSLOGIC_PROTOCOL}}://{{settings.VIPSLOGIC_SERVER_NAME}}/public/nordic_septoria_map/nordic_septoria_map.js"/></script> </code> <p>Then the application will look like this</p> - <div id="nordicSeptoriaMapContainer" style="width:800px;" data-language="dk"></div> + <div id="nordicSeptoriaMapContainer" style="width:800px;" data-language="dk" data-mainmap-height="700px;"></div> <script id="nordicSeptoriaMapScript" type="text/javascript" src="{{settings.VIPSLOGIC_PROTOCOL}}://{{settings.VIPSLOGIC_SERVER_NAME}}/public/nordic_septoria_map/nordic_septoria_map.js"/></script> <!--script id="zymoGridMapScript" type="text/javascript" src="http://restclienthtml/public/nordic_septoria_whs/nordic_septoria_whs.js"/></script--> - <p>If you omit the style attribute, the application will fill all available space</p> - <p>If you omit the data-language attribute, the default language (en) will be used. Currently supported languages are no, dk and en. </p> + <ul> + <li>If you omit the style attribute, the application will fill all available space</li> + <li>If you omit the data-language attribute, the default language (en) will be used. Currently supported languages are no, dk and en. </li> + <li>If you omit the data-mainmap-height attribute, the main map's height will be 450px.</li> + </ul> </body> </html> \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 995c1d77cc3460eb6e9149d08b067f051ab873a6..c231a49cb1dac1e18c42deee4a70160926608c34 100755 --- a/requirements.txt +++ b/requirements.txt @@ -23,4 +23,5 @@ Pillow requests==2.6.0 django-tinymce==2.8.0 python-dateutil==1.5 -django-extensions \ No newline at end of file +django-extensions +selenium \ No newline at end of file