diff --git a/app/assets/javascripts/controllers/queriesCtrl.js b/app/assets/javascripts/controllers/queriesCtrl.js index 4f16a92de..dc54df44d 100644 --- a/app/assets/javascripts/controllers/queriesCtrl.js +++ b/app/assets/javascripts/controllers/queriesCtrl.js @@ -226,7 +226,11 @@ angular.module('QuepidApp') fullDiffName = 'Highest ratest results for each query'; } else { var snapshot = querySnapshotSvc.snapshots[queryViewSvc.diffSetting]; - fullDiffName = snapshot.name(); + // When reopening the snapshot selection UI we clear out the querySnapshotSvc.snapshots + // while reloading the data. + if (snapshot) { + fullDiffName = snapshot.name(); + } } return fullDiffName; }; diff --git a/app/assets/javascripts/services/docCacheSvc.js b/app/assets/javascripts/services/docCacheSvc.js index 85b76a78c..8d276dcf0 100644 --- a/app/assets/javascripts/services/docCacheSvc.js +++ b/app/assets/javascripts/services/docCacheSvc.js @@ -60,9 +60,9 @@ angular.module('QuepidApp') } var docIds = Object.keys(docsToFetch); - var resolver = docResolverSvc.createResolver(docIds, settings, 15); - + if ( docIds.length > 0 ) { + var resolver = docResolverSvc.createResolver(docIds, settings, 15); return resolver.fetchDocs() .then(function () { angular.forEach(resolver.docs, function (doc) { diff --git a/app/assets/javascripts/services/querySnapshotSvc.js b/app/assets/javascripts/services/querySnapshotSvc.js index d890c2830..15c58477e 100644 --- a/app/assets/javascripts/services/querySnapshotSvc.js +++ b/app/assets/javascripts/services/querySnapshotSvc.js @@ -5,11 +5,11 @@ angular.module('QuepidApp') .service('querySnapshotSvc', [ '$http', '$q', - 'settingsSvc', 'docCacheSvc', 'caseTryNavSvc', + 'settingsSvc', 'docCacheSvc', 'caseTryNavSvc', 'fieldSpecSvc', 'SnapshotFactory', function querySnapshotSvc( $http, $q, - settingsSvc, docCacheSvc, caseTryNavSvc, + settingsSvc, docCacheSvc, caseTryNavSvc, fieldSpecSvc, SnapshotFactory ) { // caches normal docs for all snapshots @@ -26,8 +26,14 @@ angular.module('QuepidApp') svc.importSnapshots = importSnapshots; svc.importSnapshotsToSpecificCase = importSnapshotsToSpecificCase; svc.get = get; + svc.mapFieldSpecToSolrFormat = mapFieldSpecToSolrFormat; + + function mapFieldSpecToSolrFormat(fieldSpec) { + let convertedfieldSpec = fieldSpec.replace(/id:_([^,]+)/, 'id:$1'); + return convertedfieldSpec; + } - var addSnapshotResp = function(snapshots) { + var addSnapshotResp = function(snapshots) { angular.forEach(snapshots, function(snapshot) { // locally store snapshot data var snapObj = new SnapshotFactory(snapshot); @@ -45,20 +51,24 @@ angular.module('QuepidApp') // however if that isnt' possible, then we require you to store the doc fields // in the snapshot, and we look them up from the Snapshot. To be clever // we pretend to be a "solr'" endpoint to drive the lookup. - if (settingsSvc.supportLookupById(settings.searchEngine) === false){ - var settingsForLookup = angular.copy(settings); - settingsForLookup.apiMethod = 'GET'; - settingsForLookup.searchEngine = 'solr'; - settingsForLookup.searchEndpointId = null; - settingsForLookup.customHeaders = null; - - let snapshotId = snapshots[0].id; - settingsForLookup.searchUrl = `${caseTryNavSvc.getQuepidRootUrl()}/api/cases/${caseTryNavSvc.getCaseNo()}/snapshots/${snapshotId}/search`; - - settings = settingsForLookup; + if (snapshots.length > 0 ) { + if (settingsSvc.supportLookupById(settings.searchEngine) === false){ + var settingsForLookup = angular.copy(settings); + settingsForLookup.apiMethod = 'GET'; + settingsForLookup.searchEngine = 'solr'; + + let solrSpecificFieldSpecStr = svc.mapFieldSpecToSolrFormat(settingsForLookup.fieldSpec); + settingsForLookup.fieldSpec = fieldSpecSvc.createFieldSpec(solrSpecificFieldSpecStr); + settingsForLookup.searchEndpointId = null; + settingsForLookup.customHeaders = null; + + let snapshotId = snapshots[0].id; + settingsForLookup.searchUrl = `${caseTryNavSvc.getQuepidRootUrl()}/api/cases/${caseTryNavSvc.getCaseNo()}/snapshots/${snapshotId}/search`; + + settings = settingsForLookup; + } } - - + return docCacheSvc.update(settings); } else { return $q(function(resolve) { diff --git a/app/controllers/api/v1/import/cases_controller.rb b/app/controllers/api/v1/import/cases_controller.rb index 5cf73efcd..171b2caa4 100644 --- a/app/controllers/api/v1/import/cases_controller.rb +++ b/app/controllers/api/v1/import/cases_controller.rb @@ -86,6 +86,9 @@ def create end if @case.save + # so annoying to import a case and then have to do the wizard! + # If you import a case, you presumably know what you are doing. + @current_user.update completed_case_wizard: true respond_with @case else render json: @case.errors, status: :bad_request diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index 5b652e349..970907a9f 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -3,6 +3,7 @@ class PagesController < ApplicationController skip_before_action :require_login skip_before_action :verify_authenticity_token, only: [ :theme_textmate, :mode_json ] + skip_before_action :check_for_announcement # before_action :check_page, only: [:show] # def show diff --git a/app/controllers/proxy_controller.rb b/app/controllers/proxy_controller.rb index dbcbd2a62..7a690d1b5 100644 --- a/app/controllers/proxy_controller.rb +++ b/app/controllers/proxy_controller.rb @@ -10,6 +10,7 @@ class ProxyController < ApplicationController skip_before_action :require_login skip_before_action :verify_authenticity_token, only: [ :fetch ] + skip_before_action :check_for_announcement # curl -X GET "http://localhost:3000/proxy/fetch?url=https://quepid-solr.dev.o19s.com/solr/tmdb/select&q=*:*" # curl -X POST "http://localhost:3000/proxy/fetch?url=https://quepid-solr.dev.o19s.com/solr/tmdb/query" -d '{"query":"star"}' # curl -X GET "http://localhost:3000/proxy/fetch?url=http://quepid-solr.dev.o19s.com:8985/solr/media/select&q=*:*" -u 'solr:SolrRocks' diff --git a/spec/javascripts/angular/services/docCacheSvc_spec.js b/spec/javascripts/angular/services/docCacheSvc_spec.js index 6a2903d0d..cb11d4648 100644 --- a/spec/javascripts/angular/services/docCacheSvc_spec.js +++ b/spec/javascripts/angular/services/docCacheSvc_spec.js @@ -104,7 +104,33 @@ describe('Service: docCacheSvc', function () { $rootScope.$apply(); expect(called).toBe(1); var mockResolver = docResolverSvc.mockResolver; - expect(mockResolver.docs.length).toBe(0); + // We only resolve if there are docs to be resolved. In this test + // we have one new doc to be resolved so one match. + expect(mockResolver.docs.length).toBe(3); + }); + + it('resolves partially ignoringredundant ids', function() { + checkSetupFromScratch(); + + docCacheSvc.addIds(['1', '2', '3', '4']); + + var called = 0; + docCacheSvc.update(ignoredSettings) + .then(function() { + expect(docCacheSvc.getDoc('1').id).toBe('1'); + expect(docCacheSvc.getDoc('2').id).toBe('2'); + expect(docCacheSvc.getDoc('3').id).toBe('3'); + expect(docCacheSvc.getDoc('4').id).toBe('4'); + called++; + }); + + $rootScope.$apply(); + expect(called).toBe(1); + var mockResolver = docResolverSvc.mockResolver; + console.log("looking at mock reoslver") + console.log(mockResolver.docs) + // We only resolved doc 4 + expect(mockResolver.docs.length).toBe(1); }); }); diff --git a/spec/javascripts/angular/services/querySnapshotSvc_spec.js b/spec/javascripts/angular/services/querySnapshotSvc_spec.js index 2319e51b2..e3e371fe5 100644 --- a/spec/javascripts/angular/services/querySnapshotSvc_spec.js +++ b/spec/javascripts/angular/services/querySnapshotSvc_spec.js @@ -305,7 +305,7 @@ describe('Service: querySnapshotSvc', function () { } }); - it('gets saved search results in saved order', function fetchAfterResolveTest() { + fit('gets saved search results in saved order', function fetchAfterResolveTest() { var snap5 = querySnapshotSvc.snapshots['5']; var snap5query0Results = snap5.getSearchResults('0'); expect(snap5query0Results[0].id).toEqual('1'); @@ -515,4 +515,13 @@ describe('Service: querySnapshotSvc', function () { expect(Object.keys(querySnapshotSvc.snapshots).length).toBe(2); }); }); + + describe('Mapping fieldSpec back to /search endpoint expectations', function() { + it('handles various patterns', function() { + expect(querySnapshotSvc.mapFieldSpecToSolrFormat('id:id title:title body')).toBe('id:id title:title body'); + expect(querySnapshotSvc.mapFieldSpecToSolrFormat('id:_id title:title body')).toBe('id:id title:title body'); + expect(querySnapshotSvc.mapFieldSpecToSolrFormat('title:title id:_id body')).toBe('title:title id:id body'); + expect(querySnapshotSvc.mapFieldSpecToSolrFormat('id title:title body')).toBe('id title:title body'); + }); + }); });