parent
8ece026c01
commit
c897d567c3
@ -0,0 +1,27 @@
|
||||
module Carto
|
||||
class DoLicensingService
|
||||
|
||||
def initialize(username)
|
||||
@username = username
|
||||
end
|
||||
|
||||
def purchase(datasets)
|
||||
Cartodb::Central.new.create_do_datasets(username: @username, datasets: datasets)
|
||||
|
||||
bq_datasets = filter_datasets(datasets, 'bq')
|
||||
spanner_datasets = filter_datasets(datasets, 'spanner')
|
||||
redis_key = "do:#{@username}:datasets"
|
||||
redis_value = ["bq", bq_datasets.to_json, "spanner", spanner_datasets.to_json]
|
||||
# TODO: merge values, not replace
|
||||
$users_metadata.hmset(redis_key, redis_value)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def filter_datasets(datasets, storage)
|
||||
filtered_datasets = datasets.select { |dataset| dataset[:available_in].include?(storage) }
|
||||
filtered_datasets.map { |dataset| dataset.slice(:dataset_id, :expires_at) }
|
||||
end
|
||||
|
||||
end
|
||||
end
|
@ -0,0 +1,54 @@
|
||||
require 'spec_helper_min'
|
||||
|
||||
describe Carto::DoLicensingService do
|
||||
|
||||
before(:all) do
|
||||
@user = FactoryGirl.create(:valid_user, username: 'fulano')
|
||||
@service = Carto::DoLicensingService.new('fulano')
|
||||
@datasets = [
|
||||
{ dataset_id: 'dataset1', available_in: ['bq', 'spanner'], price: 100,
|
||||
expires_at: Time.new(2020, 9, 27, 8, 0, 0) },
|
||||
{ dataset_id: 'dataset2', available_in: ['spanner'], price: 200,
|
||||
expires_at: Time.new(2020, 12, 31, 12, 0, 0) }
|
||||
]
|
||||
end
|
||||
|
||||
after(:all) do
|
||||
@user.destroy
|
||||
end
|
||||
|
||||
describe '#purchase' do
|
||||
before(:each) do
|
||||
@central_mock = mock
|
||||
Cartodb::Central.stubs(:new).returns(@central_mock)
|
||||
end
|
||||
|
||||
after(:each) do
|
||||
Cartodb::Central.unstub(:new)
|
||||
end
|
||||
|
||||
it 'calls create_do_datasets from Central with the expected parameters' do
|
||||
@central_mock.expects(:create_do_datasets).once.with(username: 'fulano', datasets: @datasets)
|
||||
|
||||
@service.purchase(@datasets)
|
||||
end
|
||||
|
||||
it 'stores the metadata in Redis' do
|
||||
@central_mock.stubs(:create_do_datasets)
|
||||
redis_key = "do:fulano:datasets"
|
||||
bq_datasets = [
|
||||
{ dataset_id: 'dataset1', expires_at: Time.new(2020, 9, 27, 8, 0, 0) }
|
||||
].to_json
|
||||
spanner_datasets = [
|
||||
{ dataset_id: 'dataset1', expires_at: Time.new(2020, 9, 27, 8, 0, 0) },
|
||||
{ dataset_id: 'dataset2', expires_at: Time.new(2020, 12, 31, 12, 0, 0) }
|
||||
].to_json
|
||||
|
||||
@service.purchase(@datasets)
|
||||
|
||||
$users_metadata.hget(redis_key, 'bq').should eq bq_datasets
|
||||
$users_metadata.hget(redis_key, 'spanner').should eq spanner_datasets
|
||||
end
|
||||
end
|
||||
|
||||
end
|
Loading…
Reference in new issue