-- Copyright (c) HashiCorp, Inc.
-- SPDX-License-Identifier: BUSL-1.1

-- upsert tests that the wh_upsert_user function will do an update when
-- an existing source wh_user_dimension exists.
begin;
  select plan(4);

  select wtt_load('widgets', 'iam', 'kms', 'auth', 'hosts', 'targets');

  -- ensure no existing dimensions
  select is(count(*), 0::bigint) from wh_user_dimension where user_id = 'u_____walter';

  insert into wh_user_dimension
    (
      key,
      user_id,                  user_name,                       user_description,
      auth_account_id,          auth_account_type,               auth_account_name,             auth_account_description,
      auth_account_external_id, auth_account_full_name,          auth_account_email,
      auth_method_id,           auth_method_type,                auth_method_name,              auth_method_description,
      auth_method_external_id,
      user_organization_id,     user_organization_name,          user_organization_description,
      current_row_indicator,    row_effective_time,              row_expiration_time
    )
  values
    (
      'wud_____1',
      'u_____walter',           'Walter',                        'This is Walter',
      'apa___walter',           'password auth account',         'walter',                      'Account for Walter',
      'None',                   'None',                          'None',
      'apm___widget',           'password auth method',          'Widget Auth Password',        'None',
      'None',
      'o_____widget',           'Widget Inc',                    'None',
      'Current',                '2021-07-21T12:01'::timestamptz, 'infinity'::timestamptz
    );

  select lives_ok($$select wh_upsert_user('u_____walter', 'tok___walter')$$);

  -- upsert should insert a user_dimension
  select is(count(*), 2::bigint) from wh_user_dimension where user_id = 'u_____walter';
  select is(count(*), 1::bigint) from wh_user_dimension where user_id = 'u_____walter' and current_row_indicator = 'Current';

  select * from finish();
rollback;
