<filename>tests/bugs/core_3365_test.py
#coding:utf-8
#
# id:           bugs.core_3365
# title:        Extend syntax for ALTER USER CURRENT_USER
# decription:   
#                   Replaced old code: removed EDS from here as it is not needed at all: 
#                   we can use here trivial "connect '$(DSN)' ..." instead.
#                   Non-privileged user is created in this test and then we check that 
#                   he is able to change his personal data: password, firstname and any of
#                   TAGS key-value pair (avaliable in Srp only).
#               
#                   Checked on 4.0.0.1635: OK, 3.773s; 3.0.5.33180: OK, 2.898s.
#                
# tracker_id:   CORE-3365
# min_versions: ['3.0']
# versions:     3.0
# qmid:         None

import pytest
from firebird.qa import db_factory, isql_act, Action

# version: 3.0
# resources: None

substitutions_1 = [('[ \t]+', ' '), ('=', '')]

init_script_1 = """"""

db_1 = db_factory(sql_dialect=3, init=init_script_1)

test_script_1 = """
    set bail on;
    set count on;

    -- Drop any old account with name = 'TMP$C3365' if it remains from prevoius run:
    set term ^;
    execute block as
    begin
        begin
            execute statement 'drop user tmp$c3365 using plugin Srp' with autonomous transaction;
            when any do begin end
        end
     
        begin
        execute statement 'drop user tmp$c3365 using plugin Legacy_UserManager' with autonomous transaction;
            when any do begin end
        end
    end^
    set term ;^
    commit;

    set width usrname 10;
    set width firstname 10;
    set width sec_plugin 20;
    set width sec_attr_key 20;
    set width sec_attr_val 20;
    set width sec_plugin 20;

    recreate view v_usr_info as
    select
         su.sec$user_name as usrname
        ,su.sec$first_name as firstname
        ,su.sec$plugin as sec_plugin
        ,sa.sec$key as sec_attr_key
        ,sa.sec$value as sec_attr_val
    from sec$users su left 
    join sec$user_attributes sa using(sec$user_name, sec$plugin)
    where su.sec$user_name = upper('tmp$c3365');
    commit;

    grant select on v_usr_info to public;
    commit;

    create user tmp$c3365 password '<PASSWORD>' firstname 'John'
        using plugin Srp
        tags (initname='Ozzy', surname='Osbourne', groupname='Black Sabbath', birthday = '03.12.1948')
    ;
    commit;

    select 'before altering' as msg, v.* from v_usr_info v;
    commit;
    
    connect '$(DSN)' user tmp$c3365 password '<PASSWORD>';

    alter current user 
        set password '<PASSWORD>' firstname 'Ian'
        using plugin Srp
        tags (initname='Ian', surname='Gillan', groupname='Deep Purple', drop birthday)
    ;
    commit;

    connect '$(DSN)' user tmp$c3365 password '<PASSWORD>';
    commit;

    select 'after altering' as msg, v.* from v_usr_info v;
    commit;

    connect '$(DSN)' user SYSDBA password '<PASSWORD>';
    drop user tmp$c3365 using plugin Srp;
    commit;
  """

act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)

expected_stdout_1 = """
    MSG             USRNAME    FIRSTNAME  SEC_PLUGIN           SEC_ATTR_KEY         SEC_ATTR_VAL
    =============== ========== ========== ==================== ==================== ====================
    before altering TMP$C3365  John       Srp                  BIRTHDAY             03.12.1948
    before altering TMP$C3365  John       Srp                  GROUPNAME            Black Sabbath
    before altering TMP$C3365  John       Srp                  INITNAME             Ozzy
    before altering TMP$C3365  John       Srp                  SURNAME              Osbourne
    Records affected: 4

    MSG            USRNAME    FIRSTNAME  SEC_PLUGIN           SEC_ATTR_KEY         SEC_ATTR_VAL
    ============== ========== ========== ==================== ==================== ====================
    after altering TMP$C3365  Ian        Srp                  GROUPNAME            Deep Purple
    after altering TMP$C3365  Ian        Srp                  INITNAME             Ian
    after altering TMP$C3365  Ian        Srp                  SURNAME              Gillan
    Records affected: 3
  """

@pytest.mark.version('>=3.0')
def test_1(act_1: Action):
    act_1.expected_stdout = expected_stdout_1
    act_1.execute()
    assert act_1.clean_expected_stdout == act_1.clean_stdout


<filename>tests/bugs/core_3365_test.py
#coding:utf-8
#
# id:           bugs.core_3365
# title:        Extend syntax for ALTER USER CURRENT_USER
# decription:   
#                   Replaced old code: removed EDS from here as it is not needed at all: 
#                   we can use here trivial "connect '$(DSN)' ..." instead.
#                   Non-privileged user is created in this test and then we check that 
#                   he is able to change his personal data: password, firstname and any of
#                   TAGS key-value pair (avaliable in Srp only).
#               
#                   Checked on 4.0.0.1635: OK, 3.773s; 3.0.5.33180: OK, 2.898s.
#                
# tracker_id:   CORE-3365
# min_versions: ['3.0']
# versions:     3.0
# qmid:         None

import pytest
from firebird.qa import db_factory, isql_act, Action

# version: 3.0
# resources: None

substitutions_1 = [('[ \t]+', ' '), ('=', '')]

init_script_1 = """"""

db_1 = db_factory(sql_dialect=3, init=init_script_1)

test_script_1 = """
    set bail on;
    set count on;

    -- Drop any old account with name = 'TMP$C3365' if it remains from prevoius run:
    set term ^;
    execute block as
    begin
        begin
            execute statement 'drop user tmp$c3365 using plugin Srp' with autonomous transaction;
            when any do begin end
        end
     
        begin
        execute statement 'drop user tmp$c3365 using plugin Legacy_UserManager' with autonomous transaction;
            when any do begin end
        end
    end^
    set term ;^
    commit;

    set width usrname 10;
    set width firstname 10;
    set width sec_plugin 20;
    set width sec_attr_key 20;
    set width sec_attr_val 20;
    set width sec_plugin 20;

    recreate view v_usr_info as
    select
         su.sec$user_name as usrname
        ,su.sec$first_name as firstname
        ,su.sec$plugin as sec_plugin
        ,sa.sec$key as sec_attr_key
        ,sa.sec$value as sec_attr_val
    from sec$users su left 
    join sec$user_attributes sa using(sec$user_name, sec$plugin)
    where su.sec$user_name = upper('tmp$c3365');
    commit;

    grant select on v_usr_info to public;
    commit;

    create user tmp$c3365 password '<PASSWORD>' firstname 'John'
        using plugin Srp
        tags (initname='Ozzy', surname='Osbourne', groupname='Black Sabbath', birthday = '03.12.1948')
    ;
    commit;

    select 'before altering' as msg, v.* from v_usr_info v;
    commit;
    
    connect '$(DSN)' user tmp$c3365 password '<PASSWORD>';

    alter current user 
        set password '<PASSWORD>' firstname 'Ian'
        using plugin Srp
        tags (initname='Ian', surname='Gillan', groupname='Deep Purple', drop birthday)
    ;
    commit;

    connect '$(DSN)' user tmp$c3365 password '<PASSWORD>';
    commit;

    select 'after altering' as msg, v.* from v_usr_info v;
    commit;

    connect '$(DSN)' user SYSDBA password '<PASSWORD>';
    drop user tmp$c3365 using plugin Srp;
    commit;
  """

act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)

expected_stdout_1 = """
    MSG             USRNAME    FIRSTNAME  SEC_PLUGIN           SEC_ATTR_KEY         SEC_ATTR_VAL
    =============== ========== ========== ==================== ==================== ====================
    before altering TMP$C3365  John       Srp                  BIRTHDAY             03.12.1948
    before altering TMP$C3365  John       Srp                  GROUPNAME            Black Sabbath
    before altering TMP$C3365  John       Srp                  INITNAME             Ozzy
    before altering TMP$C3365  John       Srp                  SURNAME              Osbourne
    Records affected: 4

    MSG            USRNAME    FIRSTNAME  SEC_PLUGIN           SEC_ATTR_KEY         SEC_ATTR_VAL
    ============== ========== ========== ==================== ==================== ====================
    after altering TMP$C3365  Ian        Srp                  GROUPNAME            Deep Purple
    after altering TMP$C3365  Ian        Srp                  INITNAME             Ian
    after altering TMP$C3365  Ian        Srp                  SURNAME              Gillan
    Records affected: 3
  """

@pytest.mark.version('>=3.0')
def test_1(act_1: Action):
    act_1.expected_stdout = expected_stdout_1
    act_1.execute()
    assert act_1.clean_expected_stdout == act_1.clean_stdout


#coding:utf-8 # # id:           bugs.core_3365 # title:        Extend syntax for ALTER USER CURRENT_USER # decription: #                   Replaced old code: removed EDS from here as it is not needed at all: #                   we can use here trivial "connect '$(DSN)' ..." instead. #                   Non-privileged user is created in this test and then we check that #                   he is able to change his personal data: password, firstname and any of #                   TAGS key-value pair (avaliable in Srp only). # #                   Checked on 4.0.0.1635: OK, 3.773s; 3.0.5.33180: OK, 2.898s. # # tracker_id:   CORE-3365 # min_versions: ['3.0'] # versions:     3.0 # qmid:         None # version: 3.0 # resources: None set bail on;     set count on;      -- Drop any old account with name = 'TMP$C3365' if it remains from prevoius run:     set term ^;     execute block as     begin         begin             execute statement 'drop user tmp$c3365 using plugin Srp' with autonomous transaction;             when any do begin end         end               begin         execute statement 'drop user tmp$c3365 using plugin Legacy_UserManager' with autonomous transaction;             when any do begin end         end     end^     set term ;^     commit;      set width usrname 10;     set width firstname 10;     set width sec_plugin 20;     set width sec_attr_key 20;     set width sec_attr_val 20;     set width sec_plugin 20;      recreate view v_usr_info as     select          su.sec$user_name as usrname         ,su.sec$first_name as firstname         ,su.sec$plugin as sec_plugin         ,sa.sec$key as sec_attr_key         ,sa.sec$value as sec_attr_val     from sec$users su left      join sec$user_attributes sa using(sec$user_name, sec$plugin)     where su.sec$user_name = upper('tmp$c3365');     commit;      grant select on v_usr_info to public;     commit;      create user tmp$c3365 password '<PASSWORD>' firstname 'John'         using plugin Srp         tags (initname='Ozzy', surname='Osbourne', groupname='Black Sabbath', birthday = '03.12.1948')     ;     commit;      select 'before altering' as msg, v.* from v_usr_info v;     commit;          connect '$(DSN)' user tmp$c3365 password '<PASSWORD>';      alter current user          set password '<PASSWORD>' firstname 'Ian'         using plugin Srp         tags (initname='Ian', surname='Gillan', groupname='Deep Purple', drop birthday)     ;     commit;      connect '$(DSN)' user tmp$c3365 password '<PASSWORD>';     commit;      select 'after altering' as msg, v.* from v_usr_info v;     commit;      connect '$(DSN)' user SYSDBA password '<PASSWORD>';     drop user tmp$c3365 using plugin Srp;     commit; MSG             USRNAME    FIRSTNAME  SEC_PLUGIN           SEC_ATTR_KEY         SEC_ATTR_VAL     =============== ========== ========== ==================== ==================== ====================     before altering TMP$C3365  John       Srp                  BIRTHDAY             03.12.1948     before altering TMP$C3365  John       Srp                  GROUPNAME            Black Sabbath     before altering TMP$C3365  John       Srp                  INITNAME             Ozzy     before altering TMP$C3365  John       Srp                  SURNAME              Osbourne     Records affected: 4      MSG            USRNAME    FIRSTNAME  SEC_PLUGIN           SEC_ATTR_KEY         SEC_ATTR_VAL     ============== ========== ========== ==================== ==================== ====================     after altering TMP$C3365  Ian        Srp                  GROUPNAME            Deep Purple     after altering TMP$C3365  Ian        Srp                  INITNAME             Ian     after altering TMP$C3365  Ian        Srp                  SURNAME              Gillan     Records affected: 3