mongo_browser 0.2.0.rc2 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +3 -1
- data/.rspec +1 -1
- data/.travis.yml +6 -1
- data/CHANGELOG.md +15 -0
- data/{grunt.js → Gruntfile.js} +10 -8
- data/Procfile +1 -0
- data/README.md +44 -2
- data/Rakefile +1 -12
- data/app/assets/images/ajax-loader.gif +0 -0
- data/app/assets/javascripts/app/controllers/{breadcrumbs.js.coffee → breadcrumbs_controller.js.coffee} +4 -7
- data/app/assets/javascripts/app/controllers/collections/index_controller.js.coffee +38 -0
- data/app/assets/javascripts/app/controllers/collections/stats_controller.js.coffee +17 -0
- data/app/assets/javascripts/app/controllers/{databases.js.coffee → databases/index_controller.js.coffee} +11 -15
- data/app/assets/javascripts/app/controllers/databases/stats_controller.js.coffee +15 -0
- data/app/assets/javascripts/app/controllers/documents/index_controller.js.coffee +54 -0
- data/app/assets/javascripts/app/controllers/documents/show_controller.js.coffee +38 -0
- data/app/assets/javascripts/app/controllers/main_controller.js.coffee +15 -0
- data/app/assets/javascripts/app/controllers/servers/show_controller.js.coffee +17 -0
- data/app/assets/javascripts/app/directives.js.coffee +23 -0
- data/app/assets/javascripts/app/filters.js.coffee +14 -1
- data/app/assets/javascripts/app/modules/alerts.js.coffee +58 -0
- data/app/assets/javascripts/app/modules/pager.js.coffee +2 -2
- data/app/assets/javascripts/app/modules/spinner.js.coffee +29 -0
- data/app/assets/javascripts/app/modules/table_filter.js.coffee +4 -4
- data/app/assets/javascripts/app/resources.js.coffee +14 -8
- data/app/assets/javascripts/app/services.js.coffee +11 -33
- data/app/assets/javascripts/application.js.coffee +62 -34
- data/app/assets/javascripts/application.test.js.coffee +5 -0
- data/app/assets/javascripts/compiled_templates.js.coffee +1 -0
- data/app/assets/javascripts/vendor.js.coffee +0 -1
- data/app/assets/stylesheets/application.css.scss +36 -18
- data/{public/index.html → app/views/index.erb} +8 -8
- data/bin/mongo_browser +2 -13
- data/config.ru +3 -1
- data/lib/mongo_browser.rb +1 -0
- data/lib/mongo_browser/api.rb +11 -0
- data/lib/mongo_browser/api/collections.rb +34 -0
- data/lib/mongo_browser/api/databases.rb +32 -0
- data/lib/mongo_browser/api/documents.rb +37 -0
- data/lib/mongo_browser/api/mongo.rb +41 -0
- data/lib/mongo_browser/application.rb +8 -174
- data/lib/mongo_browser/application/development.rb +32 -0
- data/lib/mongo_browser/cli.rb +48 -0
- data/lib/mongo_browser/entities.rb +43 -0
- data/lib/mongo_browser/models/collection.rb +7 -12
- data/lib/mongo_browser/models/document.rb +5 -1
- data/lib/mongo_browser/models/pager.rb +22 -9
- data/lib/mongo_browser/version.rb +1 -1
- data/mongo_browser.gemspec +22 -15
- data/package.json +30 -0
- data/public/ng/templates/alerts.html +6 -0
- data/public/ng/templates/collections/index.html +39 -0
- data/public/ng/templates/collections/stats.html +18 -0
- data/public/ng/templates/databases/index.html +35 -0
- data/public/ng/templates/databases/stats.html +18 -0
- data/public/ng/templates/documents/index.html +40 -0
- data/public/ng/templates/documents/show.html +17 -0
- data/{app/assets → public/ng}/templates/pager.html +0 -0
- data/{app/assets/templates/server_info.html → public/ng/templates/server/show.html} +1 -1
- data/{app/assets → public/ng}/templates/table_filter.html +0 -0
- data/script/ci_all +5 -1
- data/script/ci_e2e +5 -2
- data/script/ci_javascripts +1 -1
- data/script/ci_rspec +1 -1
- data/spec/javascripts/app/controllers/{breadcrumbs_spec.js.coffee → breadcrumbs_controller_spec.js.coffee} +1 -1
- data/spec/javascripts/app/controllers/collections/index_controller_spec.js.coffee +95 -0
- data/spec/javascripts/app/controllers/collections/stats_controller_spec.js.coffee +34 -0
- data/spec/javascripts/app/controllers/databases/index_controller_spec.js.coffee +93 -0
- data/spec/javascripts/app/controllers/databases/stats_controller_spec.js.coffee +30 -0
- data/spec/javascripts/app/controllers/documents/index_controller_spec.js.coffee +108 -0
- data/spec/javascripts/app/controllers/documents/show_controller_spec.js.coffee +94 -0
- data/spec/javascripts/app/controllers/{main_spec.js.coffee → main_controller_spec.js.coffee} +2 -2
- data/spec/javascripts/app/controllers/{server_info_spec.js.coffee → server/show_controller_spec.js.coffee} +5 -6
- data/spec/javascripts/app/directives_spec.js.coffee +108 -24
- data/spec/javascripts/app/filters_spec.js.coffee +31 -5
- data/spec/javascripts/app/modules/alerts_spec.js.coffee +138 -0
- data/spec/javascripts/app/modules/dialogs_spec.js.coffee +1 -2
- data/spec/javascripts/app/modules/pager_spec.js.coffee +0 -1
- data/spec/javascripts/app/modules/spinner_spec.js.coffee +65 -0
- data/spec/javascripts/app/modules/table_filter_spec.js.coffee +9 -9
- data/spec/javascripts/app/resources_spec.js.coffee +99 -0
- data/spec/javascripts/app/services_spec.js.coffee +31 -71
- data/spec/javascripts/config/{testacular-e2e.conf.js → karma-e2e.conf.js} +1 -1
- data/spec/javascripts/config/{testacular.conf.js → karma.conf.js} +2 -3
- data/spec/javascripts/e2e/collection_stats_scenario.js.coffee +12 -0
- data/spec/javascripts/e2e/collections_scenario.js.coffee +59 -20
- data/spec/javascripts/e2e/database_stats_scenario.js.coffee +11 -0
- data/spec/javascripts/e2e/databases_scenario.js.coffee +37 -36
- data/spec/javascripts/e2e/document_show_scenario.js.coffee +31 -0
- data/spec/javascripts/e2e/documents_pagination_scenario.js.coffee +33 -0
- data/spec/javascripts/e2e/documents_scenario.js.coffee +43 -4
- data/spec/javascripts/e2e/server_info_scenario.js.coffee +8 -2
- data/spec/javascripts/helpers/mocks.js.coffee +2 -0
- data/spec/javascripts/helpers_e2e/dsl.js.coffee +20 -0
- data/spec/javascripts/lib/angular-mocks.js +64 -16
- data/spec/javascripts/lib/angular-scenario.js +724 -561
- data/spec/javascripts/runner.html +5 -5
- data/spec/lib/api/collections_spec.rb +62 -0
- data/spec/lib/api/databases_spec.rb +58 -0
- data/spec/lib/api/documents_spec.rb +135 -0
- data/spec/lib/api/mongo_spec.rb +27 -0
- data/spec/lib/cli_spec.rb +19 -0
- data/spec/lib/entities_spec.rb +39 -0
- data/spec/lib/models/collection_spec.rb +16 -10
- data/spec/lib/models/database_spec.rb +4 -4
- data/spec/lib/models/document_spec.rb +5 -5
- data/spec/lib/models/pager_spec.rb +20 -11
- data/spec/spec_helper.rb +7 -15
- data/spec/support/api_example_group.rb +45 -0
- data/spec/support/fixtures.rb +10 -6
- data/spec/support/matchers/expose.rb +18 -0
- data/vendor/assets/javascripts/angular/angular-bootstrap.js +1 -1
- data/vendor/assets/javascripts/angular/angular-resource.js +78 -56
- data/vendor/assets/javascripts/angular/angular-sanitize.js +3 -1
- data/vendor/assets/javascripts/angular/angular.js +720 -404
- metadata +323 -183
- data/app/assets/javascripts/app.js.coffee +0 -8
- data/app/assets/javascripts/app/controllers.js.coffee +0 -2
- data/app/assets/javascripts/app/controllers/alerts.js.coffee +0 -12
- data/app/assets/javascripts/app/controllers/collections.js.coffee +0 -40
- data/app/assets/javascripts/app/controllers/documents.js.coffee +0 -49
- data/app/assets/javascripts/app/controllers/main.js.coffee +0 -10
- data/app/assets/javascripts/app/controllers/server_info.js.coffee +0 -14
- data/app/assets/javascripts/templates.js.coffee +0 -1
- data/app/assets/javascripts/templates/.gitkeep +0 -0
- data/app/assets/templates/collections.html +0 -53
- data/app/assets/templates/databases.html +0 -32
- data/app/assets/templates/documents.html +0 -45
- data/config-e2e.ru +0 -20
- data/spec/features/collections_list_spec.rb +0 -64
- data/spec/features/documents_list_spec.rb +0 -139
- data/spec/features/server_info_spec.rb +0 -23
- data/spec/javascripts/app/controllers/alerts_spec.js.coffee +0 -36
- data/spec/javascripts/app/controllers/collections_spec.js.coffee +0 -78
- data/spec/javascripts/app/controllers/databases_spec.js.coffee +0 -55
- data/spec/javascripts/app/controllers/documents_spec.js.coffee +0 -62
- data/spec/javascripts/helpers_e2e/app_element.js.coffee +0 -6
- data/spec/support/feature_example_group.rb +0 -53
- data/spec/support/matchers/have_flash_message.rb +0 -16
- data/spec/support/mongod.rb +0 -91
- data/spec/support/mongodb.conf +0 -47
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
module = angular.module("mb.controllers")
|
|
2
|
-
|
|
3
|
-
class AlertsController
|
|
4
|
-
constructor: (@$scope, @alerts) ->
|
|
5
|
-
@$scope.alertMessages = @alerts.messages
|
|
6
|
-
|
|
7
|
-
@$scope.disposeAlert = (id) =>
|
|
8
|
-
@alerts.dispose(id)
|
|
9
|
-
|
|
10
|
-
AlertsController.$inject = ["$scope", "alerts"]
|
|
11
|
-
|
|
12
|
-
module.controller "alerts", AlertsController
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
module = angular.module("mb.controllers")
|
|
2
|
-
|
|
3
|
-
# TODO clenup this controller, see DatabasesController
|
|
4
|
-
class CollectionsController
|
|
5
|
-
constructor: (@$scope, @$routeParams, @Collection, @$http, @confirmationDialog, @alerts) ->
|
|
6
|
-
|
|
7
|
-
@$scope.dbName = @$routeParams.dbName
|
|
8
|
-
@$scope.filterValue = ""
|
|
9
|
-
|
|
10
|
-
_onLoadComplete = (data) =>
|
|
11
|
-
@$scope.collections = data
|
|
12
|
-
@$scope.loading = false
|
|
13
|
-
|
|
14
|
-
@$scope.fetchCollections = =>
|
|
15
|
-
@$scope.loading = true
|
|
16
|
-
@$scope.collections = @Collection.query({ dbName: @$scope.dbName }, _onLoadComplete)
|
|
17
|
-
|
|
18
|
-
@$scope.fetchCollections()
|
|
19
|
-
|
|
20
|
-
# TODO create resource for this call
|
|
21
|
-
@$http.get("/api/databases/#{@$scope.dbName}/stats.json").success (data) =>
|
|
22
|
-
@$scope.dbStats = data
|
|
23
|
-
|
|
24
|
-
@$scope.isLoading = => @$scope.loading
|
|
25
|
-
|
|
26
|
-
@$scope.delete = (collection) =>
|
|
27
|
-
@confirmationDialog
|
|
28
|
-
message: "Deleting #{collection.name}. Are you sure?"
|
|
29
|
-
onOk: =>
|
|
30
|
-
resource = new @Collection()
|
|
31
|
-
params = dbName: collection.dbName, id: collection.name
|
|
32
|
-
|
|
33
|
-
resource.$delete params, =>
|
|
34
|
-
@alerts.info("Collection #{collection.name} has been deleted.")
|
|
35
|
-
@$scope.fetchCollections()
|
|
36
|
-
|
|
37
|
-
CollectionsController.$inject = ["$scope", "$routeParams",
|
|
38
|
-
"Collection", "$http", "confirmationDialog", "alerts"]
|
|
39
|
-
|
|
40
|
-
module.controller "collections", CollectionsController
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
module = angular.module("mb.controllers")
|
|
2
|
-
|
|
3
|
-
# TODO clenup this controller, see DatabasesController
|
|
4
|
-
class DocumentsController
|
|
5
|
-
constructor: (@$scope, @$routeParams, @$http, @Document, @confirmationDialog, @alerts) ->
|
|
6
|
-
@$scope.dbName = @$routeParams.dbName
|
|
7
|
-
@$scope.collectionName = @$routeParams.collectionName
|
|
8
|
-
|
|
9
|
-
@$scope.isLoading = => @$scope.loading
|
|
10
|
-
|
|
11
|
-
_onLoadComplete = (data) =>
|
|
12
|
-
@$scope.loading = false
|
|
13
|
-
|
|
14
|
-
@$scope.documents = data.documents
|
|
15
|
-
@$scope.page = data.page
|
|
16
|
-
@$scope.totalPages = data.totalPages
|
|
17
|
-
@$scope.size = data.size
|
|
18
|
-
|
|
19
|
-
@$scope.fetchDocuments = (page = 1) =>
|
|
20
|
-
return if @$scope.isLoading() # TODO workaround for doule request
|
|
21
|
-
@$scope.loading = true
|
|
22
|
-
|
|
23
|
-
params = dbName: @$scope.dbName, collectionName: @$scope.collectionName, page: page
|
|
24
|
-
@Document.query(params, _onLoadComplete)
|
|
25
|
-
|
|
26
|
-
@$scope.page = 1
|
|
27
|
-
@$scope.fetchDocuments()
|
|
28
|
-
|
|
29
|
-
@$scope.$watch "page", (page) =>
|
|
30
|
-
@$scope.fetchDocuments(page)
|
|
31
|
-
|
|
32
|
-
# TODO create resource for this call
|
|
33
|
-
@$http.get("/api/databases/#{@$scope.dbName}/collections/#{@$scope.collectionName}/stats.json").success (data) =>
|
|
34
|
-
@$scope.collectionStats = data
|
|
35
|
-
|
|
36
|
-
@$scope.delete = (document) =>
|
|
37
|
-
@confirmationDialog
|
|
38
|
-
message: "Are you sure?"
|
|
39
|
-
onOk: =>
|
|
40
|
-
resource = new @Document()
|
|
41
|
-
params = dbName: @$scope.dbName, collectionName: @$scope.collectionName, id: document.id
|
|
42
|
-
|
|
43
|
-
resource.$delete params, =>
|
|
44
|
-
@alerts.info("Document #{document.id} has been deleted.")
|
|
45
|
-
@$scope.fetchDocuments()
|
|
46
|
-
|
|
47
|
-
DocumentsController.$inject = ["$scope", "$routeParams", "$http", "Document", "confirmationDialog", "alerts"]
|
|
48
|
-
|
|
49
|
-
module.controller "documents", DocumentsController
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
module = angular.module("mb.controllers")
|
|
2
|
-
|
|
3
|
-
class MainController
|
|
4
|
-
constructor: (@$scope, @$http) ->
|
|
5
|
-
@$http.get("/api/version.json").success (data) =>
|
|
6
|
-
@$scope.appVersion = data.version
|
|
7
|
-
|
|
8
|
-
MainController.$inject = ["$scope", "$http"]
|
|
9
|
-
|
|
10
|
-
module.controller "main", MainController
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
module = angular.module("mb.controllers")
|
|
2
|
-
|
|
3
|
-
class ServerInfo
|
|
4
|
-
constructor: (@$scope, @$http) ->
|
|
5
|
-
@$scope.loading = true
|
|
6
|
-
@$http.get("/api/server_info.json").success(@onLoadComplete)
|
|
7
|
-
|
|
8
|
-
onLoadComplete: (data) =>
|
|
9
|
-
@$scope.serverInfo = data
|
|
10
|
-
@$scope.loading = false
|
|
11
|
-
|
|
12
|
-
ServerInfo.$inject = ["$scope", "$http"]
|
|
13
|
-
|
|
14
|
-
module.controller "serverInfo", ServerInfo
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
#= require_tree ./templates
|
|
File without changes
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
<header>
|
|
2
|
-
<h2>{{dbName}} collections</h2>
|
|
3
|
-
</header>
|
|
4
|
-
|
|
5
|
-
<div class="tabbable">
|
|
6
|
-
<div class="tab-pane" title="Collections" ng-hide="isLoading()">
|
|
7
|
-
<table-filter value="filterValue.name" placeholder="Enter collection name"></table-filter>
|
|
8
|
-
|
|
9
|
-
<table ng-show="(collections | filter:filterValue).length" class="table table-striped table-hover collections">
|
|
10
|
-
<thead>
|
|
11
|
-
<tr>
|
|
12
|
-
<th>Name</th>
|
|
13
|
-
<th>Documents</th>
|
|
14
|
-
<th class="actions"> </th>
|
|
15
|
-
</tr>
|
|
16
|
-
</thead>
|
|
17
|
-
<tbody>
|
|
18
|
-
<tr ng-repeat="collection in collections | orderBy:'name' | filter:filterValue">
|
|
19
|
-
<td>
|
|
20
|
-
<a href="{{collection | documentsPath}}">
|
|
21
|
-
{{collection.name}}
|
|
22
|
-
</a>
|
|
23
|
-
</td>
|
|
24
|
-
<td>{{collection.size}}</td>
|
|
25
|
-
<td class="actions">
|
|
26
|
-
<delete-button ng-click="delete(collection)" />
|
|
27
|
-
</td>
|
|
28
|
-
</tr>
|
|
29
|
-
</tbody>
|
|
30
|
-
</table>
|
|
31
|
-
|
|
32
|
-
<div ng-hide="(collections | filter:filterValue).length" class="filter alert">
|
|
33
|
-
Nothing has been found.
|
|
34
|
-
</div>
|
|
35
|
-
</div>
|
|
36
|
-
|
|
37
|
-
<div class="tab-pane" title="Database stats">
|
|
38
|
-
<table class="table table-striped table-hover">
|
|
39
|
-
<thead>
|
|
40
|
-
<tr>
|
|
41
|
-
<th>Property</th>
|
|
42
|
-
<th>Value</th>
|
|
43
|
-
</tr>
|
|
44
|
-
</thead>
|
|
45
|
-
<tbody>
|
|
46
|
-
<tr ng-repeat="(property, value) in dbStats">
|
|
47
|
-
<td>{{property}}</td>
|
|
48
|
-
<td>{{value}}</td>
|
|
49
|
-
</tr>
|
|
50
|
-
</tbody>
|
|
51
|
-
</table>
|
|
52
|
-
</div>
|
|
53
|
-
</div>
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
<header>
|
|
2
|
-
<h2>localhost databases</h2>
|
|
3
|
-
</header>
|
|
4
|
-
|
|
5
|
-
<div ng-hide="isLoading()">
|
|
6
|
-
<table-filter value="filterValue.name" placeholder="Enter database name"></table-filter>
|
|
7
|
-
|
|
8
|
-
<table ng-show="(databases | filter:filterValue).length" class="table table-striped table-hover databases">
|
|
9
|
-
<thead>
|
|
10
|
-
<tr>
|
|
11
|
-
<th>Name</th>
|
|
12
|
-
<th>Collections</th>
|
|
13
|
-
<th>Size</th>
|
|
14
|
-
<th class="actions"> </th>
|
|
15
|
-
</tr>
|
|
16
|
-
</thead>
|
|
17
|
-
<tbody>
|
|
18
|
-
<tr ng-repeat="database in databases | orderBy:'name' | filter:filterValue">
|
|
19
|
-
<td><a href="{{database | collectionsPath}}">{{database.name}}</a></td>
|
|
20
|
-
<td>{{database.count}}</td>
|
|
21
|
-
<td>{{database.size | humanSize}}</td>
|
|
22
|
-
<td class="actions">
|
|
23
|
-
<delete-button ng-click="delete(database)" />
|
|
24
|
-
</td>
|
|
25
|
-
</tr>
|
|
26
|
-
</tbody>
|
|
27
|
-
</table>
|
|
28
|
-
|
|
29
|
-
<div ng-hide="(databases | filter:filterValue).length" class="filter alert">
|
|
30
|
-
Nothing has been found.
|
|
31
|
-
</div>
|
|
32
|
-
</div>
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
<header>
|
|
2
|
-
<h2>{{collectionName}} documents</h2>
|
|
3
|
-
</header>
|
|
4
|
-
|
|
5
|
-
<div class="tabbable">
|
|
6
|
-
<div class="tab-pane" title="Documents">
|
|
7
|
-
<pager page="page" total-pages="totalPages"></pager>
|
|
8
|
-
|
|
9
|
-
<table class="table table-striped table-hover documents">
|
|
10
|
-
<thead>
|
|
11
|
-
<tr>
|
|
12
|
-
<th>Data</th>
|
|
13
|
-
<th class="actions"> </th>
|
|
14
|
-
</tr>
|
|
15
|
-
</thead>
|
|
16
|
-
<tbody>
|
|
17
|
-
<tr ng-repeat="document in documents" class="document id-{{document.id}}">
|
|
18
|
-
<td class="data" ng-bind-html="document.data | jsonDocument"></td>
|
|
19
|
-
<td class="actions">
|
|
20
|
-
<delete-button ng-click="delete(document)" />
|
|
21
|
-
</td>
|
|
22
|
-
</tr>
|
|
23
|
-
</tbody>
|
|
24
|
-
</table>
|
|
25
|
-
|
|
26
|
-
<pager page="page" total-pages="totalPages"></pager>
|
|
27
|
-
</div>
|
|
28
|
-
|
|
29
|
-
<div class="tab-pane" title="Collection stats">
|
|
30
|
-
<table class="table table-striped table-hover">
|
|
31
|
-
<thead>
|
|
32
|
-
<tr>
|
|
33
|
-
<th>Property</th>
|
|
34
|
-
<th>Value</th>
|
|
35
|
-
</tr>
|
|
36
|
-
</thead>
|
|
37
|
-
<tbody>
|
|
38
|
-
<tr ng-repeat="(property, value) in collectionStats">
|
|
39
|
-
<td>{{property}}</td>
|
|
40
|
-
<td>{{value}}</td>
|
|
41
|
-
</tr>
|
|
42
|
-
</tbody>
|
|
43
|
-
</table>
|
|
44
|
-
</div>
|
|
45
|
-
</div>
|
data/config-e2e.ru
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
require "mongo_browser"
|
|
2
|
-
|
|
3
|
-
require File.expand_path("spec/support/mongod")
|
|
4
|
-
require File.expand_path("spec/support/fixtures")
|
|
5
|
-
|
|
6
|
-
test_server = Mongod.instance
|
|
7
|
-
fixtures = Fixtures.instance
|
|
8
|
-
|
|
9
|
-
test_server.start! do |port|
|
|
10
|
-
MongoBrowser.mongodb_host = "127.0.0.1"
|
|
11
|
-
MongoBrowser.mongodb_port = port
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
fixtures.load!
|
|
15
|
-
|
|
16
|
-
run MongoBrowser::Application
|
|
17
|
-
|
|
18
|
-
at_exit do
|
|
19
|
-
test_server.shutdown!
|
|
20
|
-
end
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
require "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "Collections list", type: :request, js: true do
|
|
4
|
-
before do
|
|
5
|
-
visit "/"
|
|
6
|
-
|
|
7
|
-
within("table.databases") { click_link "first_database" }
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
xit "displays the breadcrumb" do
|
|
11
|
-
within ".breadcrumbs" do
|
|
12
|
-
within "li:nth-child(1)" do
|
|
13
|
-
expect(page).to have_link("first_database", href: "/databases/first_database/collections")
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
describe "click on delete collection button" do
|
|
19
|
-
xit "deletes a collection" do
|
|
20
|
-
click_delete_button_for("second_collection")
|
|
21
|
-
confirm_dialog
|
|
22
|
-
|
|
23
|
-
expect(page).to have_flash_message("Collection second_collection has been deleted.")
|
|
24
|
-
|
|
25
|
-
within "table.collections" do
|
|
26
|
-
expect(page).to have_link("first_collection")
|
|
27
|
-
expect(page).to_not have_link("second_collection")
|
|
28
|
-
expect(page).to have_link("third_collection")
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
click_delete_button_for("first_collection")
|
|
32
|
-
confirm_dialog
|
|
33
|
-
expect(page).to have_flash_message("Collection first_collection has been deleted.")
|
|
34
|
-
|
|
35
|
-
within "table.collections" do
|
|
36
|
-
expect(page).to_not have_link("first_collection")
|
|
37
|
-
expect(page).to_not have_link("second_collection")
|
|
38
|
-
expect(page).to have_link("third_collection")
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
click_delete_button_for("third_collection")
|
|
42
|
-
confirm_dialog
|
|
43
|
-
expect(page).to have_flash_message("Collection third_collection has been deleted.")
|
|
44
|
-
|
|
45
|
-
should_hide_the_table_and_display_a_notification
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
xit "displays error message when the collection cannot be deleted" do
|
|
49
|
-
click_delete_button_for("system.indexes")
|
|
50
|
-
confirm_dialog
|
|
51
|
-
|
|
52
|
-
expect(page).to have_flash_message("Database command 'drop' failed")
|
|
53
|
-
|
|
54
|
-
within "table.collections" do
|
|
55
|
-
expect(page).to have_link("system.indexes")
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def click_delete_button_for(collection_name)
|
|
60
|
-
collection_row = find(:xpath, %Q{//table//tr//*[contains(text(), "#{collection_name}")]/../..})
|
|
61
|
-
within(collection_row) { click_link "Delete" }
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
end
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
require "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "Documents list", type: :request, js: true do
|
|
4
|
-
let(:connection) { Fixtures.instance.connection }
|
|
5
|
-
|
|
6
|
-
before do
|
|
7
|
-
visit "/"
|
|
8
|
-
|
|
9
|
-
within("table.databases") { click_link "first_database" }
|
|
10
|
-
within("table.collections") { click_link current_collection_name }
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
shared_examples "breadcrumbs for documents list" do
|
|
14
|
-
xit "displays the breadcrumb" do
|
|
15
|
-
within ".breadcrumbs" do
|
|
16
|
-
within "li:nth-child(1)" do
|
|
17
|
-
expect(page).to have_link("first_database")
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
within "li:nth-child(2)" do
|
|
21
|
-
href = "/databases/first_database/collections/#{current_collection_name}/documents"
|
|
22
|
-
expect(page).to have_link(current_collection_name, href: href)
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
xit "has a valid title" do
|
|
28
|
-
within "h2" do
|
|
29
|
-
expect(page).to have_content("#{current_collection_name} documents")
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
context "with small number for documents" do
|
|
35
|
-
let(:current_collection_name) { "first_collection" }
|
|
36
|
-
|
|
37
|
-
include_examples "breadcrumbs for documents list"
|
|
38
|
-
|
|
39
|
-
xit "displays all documents for the selected collection" do
|
|
40
|
-
expect(page).to have_css("tr.document", count: 2)
|
|
41
|
-
|
|
42
|
-
within "table" do
|
|
43
|
-
expect(page).to have_content("This is a sample record")
|
|
44
|
-
expect(page).to have_content("This is the second sample record")
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
xit "displays information about the collection" do
|
|
49
|
-
click_link "Collection stats"
|
|
50
|
-
|
|
51
|
-
within "table" do
|
|
52
|
-
%w(ns count size avgObjSize storageSize numExtents nindexes lastExtentSize paddingFactor totalIndexSize indexSizes ok).each do |field|
|
|
53
|
-
expect(page).to have_content(field)
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
describe "click on delete document button" do
|
|
59
|
-
let(:document) do
|
|
60
|
-
database = connection.db("first_database")
|
|
61
|
-
collection = database.collection(current_collection_name)
|
|
62
|
-
collection.find_one(name: "This is the second sample record")
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
xit "removes a document from the collection" do
|
|
66
|
-
click_delete_button_for(document)
|
|
67
|
-
confirm_dialog
|
|
68
|
-
|
|
69
|
-
expect(page).to have_flash_message("Document #{document["_id"]} has been deleted.")
|
|
70
|
-
|
|
71
|
-
expect(page).to have_css("tr.document", count: 1)
|
|
72
|
-
|
|
73
|
-
within "table" do
|
|
74
|
-
expect(page).to have_content("This is a sample record")
|
|
75
|
-
expect(page).not_to have_content(document["name"])
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
def click_delete_button_for(document)
|
|
80
|
-
document_row = find("tr.id-#{document["_id"]}")
|
|
81
|
-
within(document_row) { click_link "Delete" }
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
context "with large number of documents" do
|
|
87
|
-
let(:current_collection_name) { "second_collection" }
|
|
88
|
-
|
|
89
|
-
before do
|
|
90
|
-
database = connection.db("first_database")
|
|
91
|
-
collection = database.collection(current_collection_name)
|
|
92
|
-
|
|
93
|
-
70.times do |n|
|
|
94
|
-
collection.insert(name: "Document #{n}", position: n)
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
visit current_path
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
include_examples "breadcrumbs for documents list"
|
|
101
|
-
|
|
102
|
-
xit "displays a pagination" do
|
|
103
|
-
expect(page).to have_css("div.pagination", count: 2)
|
|
104
|
-
within "div.pagination" do
|
|
105
|
-
(1..3).each do |n|
|
|
106
|
-
expect(page).to have_link(n.to_s)
|
|
107
|
-
end
|
|
108
|
-
end
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
xit "paginates documents" do
|
|
112
|
-
within "table.documents" do
|
|
113
|
-
(0...25).each do |n|
|
|
114
|
-
expect(page).to have_content("Document #{n}")
|
|
115
|
-
end
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
within "div.pagination" do
|
|
119
|
-
click_link "2"
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
within "table.documents" do
|
|
123
|
-
(25...50).each do |n|
|
|
124
|
-
expect(page).to have_content("Document #{n}")
|
|
125
|
-
end
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
within "div.pagination" do
|
|
129
|
-
click_link "3"
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
within "table.documents" do
|
|
133
|
-
(50...70).each do |n|
|
|
134
|
-
expect(page).to have_content("Document #{n}")
|
|
135
|
-
end
|
|
136
|
-
end
|
|
137
|
-
end
|
|
138
|
-
end
|
|
139
|
-
end
|