Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
heptapod
heptapod
Commits
e828d027e771
Commit
3d0b922d
authored
Oct 28, 2018
by
Andreas Brandl
Browse files
More specs for fallback testing.
parent
c5be2901c53b
Changes
2
Hide whitespace changes
Inline
Side-by-side
lib/gitlab/database/count.rb
View file @
e828d027
...
...
@@ -29,6 +29,9 @@ def self.approximate_counts(models, strategies: [ReltuplesCountStrategy, ExactCo
strategies
.
each_with_object
({})
do
|
strategy
,
counts_by_model
|
if
strategy
.
enabled?
models_with_missing_counts
=
models
-
counts_by_model
.
keys
return
counts_by_model
if
models_with_missing_counts
.
empty?
counts
=
strategy
.
new
(
models_with_missing_counts
).
count
counts
.
each
do
|
model
,
count
|
...
...
spec/lib/gitlab/database/count_spec.rb
View file @
e828d027
...
...
@@ -27,6 +27,39 @@
end
context
'fallbacks'
do
subject
{
described_class
.
approximate_counts
(
models
,
strategies:
strategies
)
}
let
(
:strategies
)
do
[
double
(
's1'
,
:enabled?
=>
true
,
new:
first_strategy
),
double
(
's2'
,
:enabled?
=>
true
,
new:
second_strategy
)
]
end
let
(
:first_strategy
)
{
double
(
'first strategy'
,
count:
{})
}
let
(
:second_strategy
)
{
double
(
'second strategy'
,
count:
{})
}
it
'gets results from first strategy'
do
expect
(
strategies
[
0
]).
to
receive
(
:new
).
with
(
models
).
and_return
(
first_strategy
)
expect
(
first_strategy
).
to
receive
(
:count
)
subject
end
it
'gets more results from second strategy if some counts are missing'
do
expect
(
first_strategy
).
to
receive
(
:count
).
and_return
({
Project
=>
3
})
expect
(
strategies
[
1
]).
to
receive
(
:new
).
with
([
Identity
]).
and_return
(
second_strategy
)
expect
(
second_strategy
).
to
receive
(
:count
).
and_return
({
Identity
=>
1
})
expect
(
subject
).
to
eq
({
Project
=>
3
,
Identity
=>
1
})
end
it
'does not get more results as soon as all counts are present'
do
expect
(
first_strategy
).
to
receive
(
:count
).
and_return
({
Project
=>
3
,
Identity
=>
1
})
expect
(
strategies
[
1
]).
not_to
receive
(
:new
)
subject
end
end
context
'with PostgreSQL'
,
:postgresql
do
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment