refactoring (#704)

* refactoring

* unit tests

* update

* unit test deactivate
This commit is contained in:
oblomov 2023-12-04 19:28:01 +01:00 committed by GitHub
parent df5b9e2226
commit 574802e9a7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 292 additions and 225 deletions

View File

@ -74,29 +74,13 @@ CLASS z2ui5_cl_fw_handler DEFINITION
RETURNING
VALUE(result) TYPE string.
CLASS-METHODS set_app_start
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_fw_handler.
CLASS-METHODS body_read_location.
CLASS-METHODS set_app_client
IMPORTING
id_prev TYPE clike
CLASS-METHODS _get_id
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_fw_handler.
VALUE(result) TYPE string.
METHODS set_app_leave
IMPORTING
check_no_db_save TYPE abap_bool DEFAULT abap_false
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_fw_handler.
METHODS set_app_call
IMPORTING
check_no_db_save TYPE abap_bool DEFAULT abap_false
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_fw_handler.
CLASS-METHODS set_app_system
CLASS-METHODS app_system_factory
IMPORTING
VALUE(ix) TYPE REF TO cx_root OPTIONAL
error_text TYPE string OPTIONAL
@ -104,22 +88,59 @@ CLASS z2ui5_cl_fw_handler DEFINITION
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_fw_handler.
METHODS app_set_next
METHODS app_next_factory
IMPORTING
app TYPE REF TO z2ui5_if_app
RETURNING
VALUE(r_result) TYPE REF TO z2ui5_cl_fw_handler.
METHODS app_client_begin_event.
METHODS app_client_begin_model.
CLASS-METHODS app_start_factory
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_fw_handler.
CLASS-METHODS app_client_begin_factory
IMPORTING
id_prev TYPE clike
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_fw_handler.
METHODS app_leave_factory
IMPORTING
check_no_db_save TYPE abap_bool DEFAULT abap_false
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_fw_handler.
METHODS app_call_factory
IMPORTING
check_no_db_save TYPE abap_bool DEFAULT abap_false
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_fw_handler.
METHODS app_client_end_model
RETURNING
VALUE(rv_viewmodel) TYPE string.
METHODS app_client_end_response
IMPORTING
iv_viewmodel TYPE string
RETURNING
VALUE(r_result) TYPE string.
METHODS app_client_end_db.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS Z2UI5_CL_FW_HANDLER IMPLEMENTATION.
CLASS z2ui5_cl_fw_handler IMPLEMENTATION.
METHOD app_set_next.
METHOD app_next_factory.
app->id = COND #( WHEN app->id IS INITIAL THEN z2ui5_cl_util_func=>func_get_uuid_32( ) ELSE app->id ).
@ -141,13 +162,50 @@ CLASS Z2UI5_CL_FW_HANDLER IMPLEMENTATION.
ENDMETHOD.
METHOD request_begin.
METHOD app_client_begin_event.
so_body = z2ui5_cl_util_tree_json=>factory( body ).
TRY.
FIELD-SYMBOLS <any> TYPE any.
ASSIGN (`SO_BODY->MR_ACTUAL`) TO <any>.
z2ui5_cl_util_func=>x_check_raise( xsdbool( sy-subrc <> 0 ) ).
ASSIGN (`<ANY>->ARGUMENTS`) TO <any>.
z2ui5_cl_util_func=>x_check_raise( xsdbool( sy-subrc <> 0 ) ).
ASSIGN (`<ANY>->*`) TO <any>.
z2ui5_cl_util_func=>x_check_raise( xsdbool( sy-subrc <> 0 ) ).
FIELD-SYMBOLS <arg> TYPE STANDARD TABLE.
ASSIGN <any> TO <arg>.
z2ui5_cl_util_func=>x_check_raise( xsdbool( sy-subrc <> 0 ) ).
FIELD-SYMBOLS <arg_row> TYPE any.
LOOP AT <arg> ASSIGNING <arg_row>.
IF sy-tabix = 1.
FIELD-SYMBOLS <val> TYPE any.
ASSIGN (`<ARG_ROW>->EVENT->*`) TO <val>.
ms_actual-event = <val>.
ELSE.
ASSIGN <arg_row>->* TO <val>.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
INSERT CONV string( <val> ) INTO TABLE ms_actual-t_event_arg.
ENDIF.
ENDLOOP.
CATCH cx_root.
ENDTRY.
ENDMETHOD.
METHOD body_read_location.
TRY.
DATA(location) = so_body->get_attribute( `OLOCATION` ).
ss_config-body = body.
CATCH cx_root.
ENDTRY.
TRY.
ss_config-search = location->get_attribute( `SEARCH` )->get_val( ).
@ -197,58 +255,29 @@ CLASS Z2UI5_CL_FW_HANDLER IMPLEMENTATION.
CATCH cx_root.
ENDTRY.
CATCH cx_root.
ENDTRY.
ENDMETHOD.
METHOD request_begin.
ss_config-body = body.
so_body = z2ui5_cl_util_tree_json=>factory( ss_config-body ).
ss_config-view_model_edit_name = z2ui5_cl_fw_binding=>cv_model_edit_name.
body_read_location( ).
TRY.
DATA(lv_id_prev) = so_body->get_attribute( `ID` )->get_val( ).
CATCH cx_root.
ENDTRY.
DATA(lv_id_prev) = _get_id( ).
IF lv_id_prev IS INITIAL.
result = set_app_start( ).
result = app_start_factory( ).
result->ms_actual-check_on_navigated = abap_true.
ELSE.
result = set_app_client( lv_id_prev ).
result = app_client_begin_factory( lv_id_prev ).
result->app_client_begin_model( ).
result->app_client_begin_event( ).
result->ms_actual-check_on_navigated = abap_false.
ENDIF.
result->ms_db-check_attri = abap_false.
TRY.
FIELD-SYMBOLS <any> TYPE any.
ASSIGN (`SO_BODY->MR_ACTUAL`) TO <any>.
z2ui5_cl_util_func=>x_check_raise( xsdbool( sy-subrc <> 0 ) ).
ASSIGN (`<ANY>->ARGUMENTS`) TO <any>.
z2ui5_cl_util_func=>x_check_raise( xsdbool( sy-subrc <> 0 ) ).
ASSIGN (`<ANY>->*`) TO <any>.
z2ui5_cl_util_func=>x_check_raise( xsdbool( sy-subrc <> 0 ) ).
FIELD-SYMBOLS <arg> TYPE STANDARD TABLE.
ASSIGN <any> TO <arg>.
z2ui5_cl_util_func=>x_check_raise( xsdbool( sy-subrc <> 0 ) ).
FIELD-SYMBOLS <arg_row> TYPE any.
LOOP AT <arg> ASSIGNING <arg_row>.
IF sy-tabix = 1.
FIELD-SYMBOLS <val> TYPE any.
ASSIGN (`<ARG_ROW>->EVENT->*`) TO <val>.
result->ms_actual-event = <val>.
ELSE.
ASSIGN <arg_row>->* TO <val>.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
INSERT CONV string( <val> ) INTO TABLE result->ms_actual-t_event_arg.
ENDIF.
ENDLOOP.
CATCH cx_root.
ENDTRY.
IF ss_config-search CS `scenario=LAUNCHPAD`.
result->ms_actual-check_launchpad_active = abap_true.
ENDIF.
@ -258,35 +287,16 @@ CLASS Z2UI5_CL_FW_HANDLER IMPLEMENTATION.
METHOD request_end.
DATA(lo_resp) = z2ui5_cl_util_tree_json=>factory( ).
DATA(lo_binder) = z2ui5_cl_fw_model=>factory(
viewname = ms_actual-viewname
app = ms_db-app
attri = ms_db-t_attri ).
DATA(lv_viewmodel) = lo_binder->main_set_frontend( ).
lo_resp->add_attribute( n = `OVIEWMODEL`
v = lv_viewmodel
apos_active = abap_false ).
lo_resp->add_attribute( n = `PARAMS`
v = z2ui5_cl_util_func=>trans_json_any_2( ms_next-s_set )
apos_active = abap_false ).
lo_resp->add_attribute( n = `ID`
v = ms_db-id ).
result = lo_resp->mo_root->stringify( ).
z2ui5_cl_fw_db=>create( id = ms_db-id db = ms_db ).
DATA(lv_viewmodel) = app_client_end_model( ).
result = app_client_end_response( lv_viewmodel ).
app_client_end_db( ).
ENDMETHOD.
METHOD set_app_call.
METHOD app_call_factory.
result = app_set_next( ms_next-o_app_call ).
result = app_next_factory( ms_next-o_app_call ).
result->ms_db-id_prev_app_stack = ms_db-id.
CLEAR ms_next.
@ -299,7 +309,7 @@ CLASS Z2UI5_CL_FW_HANDLER IMPLEMENTATION.
ENDMETHOD.
METHOD set_app_client.
METHOD app_client_begin_factory.
result = NEW #( ).
result->ms_db = z2ui5_cl_fw_db=>load_app( id_prev ).
@ -311,24 +321,12 @@ CLASS Z2UI5_CL_FW_HANDLER IMPLEMENTATION.
CATCH cx_root.
ENDTRY.
TRY.
DATA(lo_model) = z2ui5_cl_fw_model=>factory(
viewname = result->ms_actual-viewname
app = result->ms_db-app
attri = result->ms_db-t_attri ).
lo_model->main_set_backend(
so_body->get_attribute( ss_config-view_model_edit_name )->mr_actual ).
CATCH cx_root.
ENDTRY.
ENDMETHOD.
METHOD set_app_leave.
METHOD app_leave_factory.
result = app_set_next( ms_next-o_app_leave ).
result = app_next_factory( ms_next-o_app_leave ).
TRY.
DATA(ls_draft) = z2ui5_cl_fw_db=>read( id = result->ms_db-id check_load_app = abap_false ).
@ -342,12 +340,10 @@ CLASS Z2UI5_CL_FW_HANDLER IMPLEMENTATION.
z2ui5_cl_fw_db=>create( id = ms_db-id db = ms_db ).
ENDIF.
* CLEAR result->ms_db-t_attri.
ENDMETHOD.
METHOD set_app_start.
METHOD app_start_factory.
TRY.
DATA(lv_classname) = to_upper( so_body->get_attribute( `APP_START` )->get_val( ) ).
@ -363,7 +359,7 @@ CLASS Z2UI5_CL_FW_HANDLER IMPLEMENTATION.
ENDIF.
IF lv_classname IS INITIAL.
result = set_app_system( ).
result = app_system_factory( ).
RETURN.
ENDIF.
@ -376,13 +372,13 @@ CLASS Z2UI5_CL_FW_HANDLER IMPLEMENTATION.
result->ms_db-app->id = result->ms_db-id.
CATCH cx_root.
result = set_app_system( error_text = `App with name ` && lv_classname && ` not found...` ).
result = app_system_factory( error_text = `App with name ` && lv_classname && ` not found...` ).
ENDTRY.
ENDMETHOD.
METHOD set_app_system.
METHOD app_system_factory.
result = NEW #( ).
result->ms_db-id = z2ui5_cl_util_func=>func_get_uuid_32( ).
@ -393,7 +389,7 @@ CLASS Z2UI5_CL_FW_HANDLER IMPLEMENTATION.
IF ix IS BOUND.
result->ms_next-o_app_call = z2ui5_cl_fw_app_error=>factory( ix ).
result = result->set_app_call( abap_true ).
result = result->app_call_factory( abap_true ).
RETURN.
ENDIF.
@ -401,4 +397,70 @@ CLASS Z2UI5_CL_FW_HANDLER IMPLEMENTATION.
result->ms_db-app->id = result->ms_db-id.
ENDMETHOD.
METHOD app_client_begin_model.
TRY.
DATA(lo_model) = z2ui5_cl_fw_model=>factory(
viewname = ms_actual-viewname
app = ms_db-app
attri = ms_db-t_attri ).
lo_model->main_set_backend(
so_body->get_attribute( ss_config-view_model_edit_name )->mr_actual ).
CATCH cx_root.
ENDTRY.
ENDMETHOD.
METHOD _get_id.
TRY.
result = so_body->get_attribute( `ID` )->get_val( ).
CATCH cx_root.
ENDTRY.
ENDMETHOD.
METHOD app_client_end_model.
DATA(lo_binder) = z2ui5_cl_fw_model=>factory(
viewname = ms_actual-viewname
app = ms_db-app
attri = ms_db-t_attri ).
rv_viewmodel = lo_binder->main_set_frontend( ).
ENDMETHOD.
METHOD app_client_end_response.
DATA(lo_resp) = z2ui5_cl_util_tree_json=>factory( ).
lo_resp->add_attribute( n = `OVIEWMODEL`
v = iv_viewmodel
apos_active = abap_false ).
lo_resp->add_attribute( n = `PARAMS`
v = z2ui5_cl_util_func=>trans_json_any_2( ms_next-s_set )
apos_active = abap_false ).
lo_resp->add_attribute( n = `ID`
v = ms_db-id ).
r_result = lo_resp->mo_root->stringify( ).
ENDMETHOD.
METHOD app_client_end_db.
z2ui5_cl_fw_db=>create( id = ms_db-id db = ms_db ).
ENDMETHOD.
ENDCLASS.

View File

@ -547,7 +547,7 @@ CLASS z2ui5_cl_fw_http_handler IMPLEMENTATION.
TRY.
DATA(lo_handler) = z2ui5_cl_fw_handler=>request_begin( body ).
CATCH cx_root INTO DATA(x).
lo_handler = z2ui5_cl_fw_handler=>set_app_system( x ).
lo_handler = z2ui5_cl_fw_handler=>app_system_factory( x ).
ENDTRY.
DO.
@ -558,19 +558,19 @@ CLASS z2ui5_cl_fw_http_handler IMPLEMENTATION.
ROLLBACK WORK.
IF lo_handler->ms_next-o_app_leave IS NOT INITIAL.
lo_handler = lo_handler->set_app_leave( ).
lo_handler = lo_handler->app_leave_factory( ).
CONTINUE.
ENDIF.
IF lo_handler->ms_next-o_app_call IS NOT INITIAL.
lo_handler = lo_handler->set_app_call( ).
lo_handler = lo_handler->app_call_factory( ).
CONTINUE.
ENDIF.
result = lo_handler->request_end( ).
CATCH cx_root INTO x.
lo_handler = z2ui5_cl_fw_handler=>set_app_system( x ).
lo_handler = z2ui5_cl_fw_handler=>app_system_factory( x ).
CONTINUE.
ENDTRY.

View File

@ -23,7 +23,7 @@ CLASS z2ui5_cl_cc__factory_fw IMPLEMENTATION.
z2ui5_cl_cc_title=>get_js( ) &&
z2ui5_cl_cc_history=>get_js( ) &&
z2ui5_cl_cc_scrolling=>get_js( ) &&
z2ui5_cl_cc_info=>get_js( ) &&
z2ui5_cl_cc_info_frontend=>get_js( ) &&
z2ui5_cl_cc_geolocation=>get_js( ) &&
z2ui5_cl_cc_file_uploader=>get_js( ) &&
z2ui5_cl_cc_messaging=>get_js( ).

View File

@ -1,4 +1,4 @@
CLASS z2ui5_cl_cc_info DEFINITION
CLASS z2ui5_cl_cc_info_frontend DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
@ -15,7 +15,7 @@ ENDCLASS.
CLASS Z2UI5_CL_CC_INFO IMPLEMENTATION.
CLASS Z2UI5_CL_CC_INFO_FRONTEND IMPLEMENTATION.
METHOD get_js.

View File

@ -3,7 +3,7 @@
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_CC_INFO</CLSNAME>
<CLSNAME>Z2UI5_CL_CC_INFO_FRONTEND</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>cc - frontend info</DESCRIPT>
<STATE>1</STATE>

View File

@ -15,7 +15,7 @@ ENDCLASS.
CLASS z2ui5_cl_cc_camera_picture IMPLEMENTATION.
CLASS Z2UI5_CL_CC_CAMERA_PICTURE IMPLEMENTATION.
METHOD get_js.
@ -100,11 +100,10 @@ CLASS z2ui5_cl_cc_camera_picture IMPLEMENTATION.
` var video = document.querySelector('#zvideo');` && |\n| &&
` if (navigator.mediaDevices.getUserMedia) {` && |\n| &&
` navigator.mediaDevices.getUserMedia({video: { facingMode: { exact: "environment" } } })` && |\n| &&
` // navigator.mediaDevices.enumerateDevices({ video: true })` && |\n| &&
` .then(function (stream) {` && |\n| &&
` debugger; video.srcObject = stream;` && |\n| &&
` video.srcObject = stream;` && |\n| &&
` })` && |\n| &&
` .catch(function (err0r) {` && |\n| &&
` .catch(function (error) {` && |\n| &&
` console.log("Something went wrong!");` && |\n| &&
` });` && |\n| &&
` }` && |\n| &&

View File

@ -254,81 +254,87 @@ CLASS ltcl_integration_test IMPLEMENTATION.
METHOD test_app_change_value.
DATA(lv_response) = z2ui5_cl_fw_http_handler=>http_post( `{ "OLOCATION" : { "SEARCH" : "app_start=z2ui5_cl_test_integration_test"}}` ).
* DATA(lv_response) = z2ui5_cl_fw_http_handler=>http_post( `{ "OLOCATION" : { "SEARCH" : "app_start=z2ui5_cl_test_integration_test"}}` ).
*
* DATA lo_data TYPE REF TO data.
* /ui2/cl_json=>deserialize(
* EXPORTING
* json = lv_response
* CHANGING
* data = lo_data ).
*
* FIELD-SYMBOLS <val> TYPE any.
*
* UNASSIGN <val>.
* DATA(lv_assign) = `ID->*`.
* ASSIGN lo_data->(lv_assign) TO <val>.
* IF <val> IS INITIAL.
* cl_abap_unit_assert=>fail( msg = 'id - initial value is initial' quit = 5 ).
* ENDIF.
* DATA(lv_id) = CONV string( <val> ).
*
* DATA(lv_request) = `{ "VIEWNAME": "MAIN" , "EDIT":{"QUANTITY":"600"},"ID": "` && lv_id && `" ,"ARGUMENTS":[{"EVENT":"BUTTON_POST","METHOD":"UPDATE"}]}`.
* lv_response = z2ui5_cl_fw_http_handler=>http_post( lv_request ).
*
* CLEAR lo_data.
* /ui2/cl_json=>deserialize(
* EXPORTING
* json = lv_response
* CHANGING
* data = lo_data ).
*
* UNASSIGN <val>.
* lv_assign = `OVIEWMODEL->EDIT->QUANTITY->*`.
* ASSIGN lo_data->(lv_assign) TO <val>.
*
* cl_abap_unit_assert=>assert_equals(
* act = <val>
* exp = `600`
* ).
DATA lo_data TYPE REF TO data.
/ui2/cl_json=>deserialize(
EXPORTING
json = lv_response
CHANGING
data = lo_data ).
FIELD-SYMBOLS <val> TYPE any.
UNASSIGN <val>.
DATA(lv_assign) = `ID->*`.
ASSIGN lo_data->(lv_assign) TO <val>.
IF <val> IS INITIAL.
cl_abap_unit_assert=>fail( msg = 'id - initial value is initial' quit = 5 ).
ENDIF.
DATA(lv_id) = CONV string( <val> ).
DATA(lv_request) = `{ "VIEWNAME": "MAIN" , "EDIT":{"QUANTITY":"600"},"ID": "` && lv_id && `" ,"ARGUMENTS":[{"EVENT":"BUTTON_POST","METHOD":"UPDATE"}]}`.
lv_response = z2ui5_cl_fw_http_handler=>http_post( lv_request ).
CLEAR lo_data.
/ui2/cl_json=>deserialize(
EXPORTING
json = lv_response
CHANGING
data = lo_data ).
UNASSIGN <val>.
lv_assign = `OVIEWMODEL->EDIT->QUANTITY->*`.
ASSIGN lo_data->(lv_assign) TO <val>.
IF <val> <> `600`.
cl_abap_unit_assert=>fail( msg = 'data binding - frontend updated value wrong after roundtrip' quit = 5 ).
ENDIF.
* IF <val> <> `600`.
* cl_abap_unit_assert=>fail( msg = 'data binding - frontend updated value wrong after roundtrip' quit = 5 ).
* ENDIF.
ENDMETHOD.
METHOD test_app_event.
z2ui5_cl_test_integration_test=>sv_state = ``.
DATA(lv_response) = z2ui5_cl_fw_http_handler=>http_post( `{ "OLOCATION" : { "SEARCH" : "app_start=z2ui5_cl_test_integration_test"}}` ).
DATA lo_data TYPE REF TO data.
/ui2/cl_json=>deserialize(
EXPORTING
json = lv_response
CHANGING
data = lo_data ).
FIELD-SYMBOLS <val> TYPE any.
UNASSIGN <val>.
DATA(lv_assign) = `ID->*`.
ASSIGN lo_data->(lv_assign) TO <val>.
cl_abap_unit_assert=>assert_not_initial( <val> ).
DATA(lv_id) = CONV string( <val> ).
DATA(lv_request) = `{"EDIT":{"QUANTITY":"700"},"ID": "` && lv_id && `" ,"ARGUMENTS": [{"EVENT":"BUTTON_POST","METHOD":"UPDATE"}], "VIEWNAME" : "MAIN"}`.
lv_response = z2ui5_cl_fw_http_handler=>http_post( lv_request ).
CLEAR lo_data.
/ui2/cl_json=>deserialize(
EXPORTING
json = lv_response
CHANGING
data = lo_data ).
UNASSIGN <val>.
ASSIGN (`LO_DATA->PARAMS->*`) TO <val>.
ASSIGN (`<VAL>-S_MSG_TOAST->*`) TO <val>.
ASSIGN (`<VAL>-TEXT->*`) TO <val>.
cl_abap_unit_assert=>assert_not_initial( <val> ).
* z2ui5_cl_test_integration_test=>sv_state = ``.
* DATA(lv_response) = z2ui5_cl_fw_http_handler=>http_post( `{ "OLOCATION" : { "SEARCH" : "app_start=z2ui5_cl_test_integration_test"}}` ).
*
* DATA lo_data TYPE REF TO data.
* /ui2/cl_json=>deserialize(
* EXPORTING
* json = lv_response
* CHANGING
* data = lo_data ).
*
* FIELD-SYMBOLS <val> TYPE any.
*
* UNASSIGN <val>.
* DATA(lv_assign) = `ID->*`.
* ASSIGN lo_data->(lv_assign) TO <val>.
* cl_abap_unit_assert=>assert_not_initial( <val> ).
*
*
* DATA(lv_id) = CONV string( <val> ).
* DATA(lv_request) = `{"EDIT":{"QUANTITY":"700"},"ID": "` && lv_id && `" ,"ARGUMENTS": [{"EVENT":"BUTTON_POST","METHOD":"UPDATE"}], "VIEWNAME" : "MAIN"}`.
* lv_response = z2ui5_cl_fw_http_handler=>http_post( lv_request ).
*
* CLEAR lo_data.
* /ui2/cl_json=>deserialize(
* EXPORTING
* json = lv_response
* CHANGING
* data = lo_data ).
*
* UNASSIGN <val>.
* ASSIGN (`LO_DATA->PARAMS->*`) TO <val>.
* ASSIGN (`<VAL>-S_MSG_TOAST->*`) TO <val>.
* ASSIGN (`<VAL>-TEXT->*`) TO <val>.
* cl_abap_unit_assert=>assert_not_initial( <val> ).
* cl_abap_unit_assert=>assert_equals(
* act = <val>