0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[OutSystems]CI/CD Probeを微修正して、BDDFramework Client Sideのテストを抽出する

Posted at

OutSystemsでCI/CDを実現するにあたって、BDDFrameworkで作成したユニットテストを自動抽出する部品として公式で推奨されているのが、ForgeにあるCI/CD Probe。
ところが、現時点 (CI/CD Probe V2.1.0) では、BDDFrameworkにのみ対応しており、BDDFramework Client Sideで作成したClient Actionのユニットテストには対応していない。

そこで、CI/CD Probeを微修正し、BDDFramework Client Sideで作成したテストを抽出する新しい部品を作ってみる。
CI/CD ProbeにはExpose REST APIが2つあるが、ScanBDDTestEndpointsを対象とする(もう1個あるが使わないので……)。

環境

Personal Environment(Version 11.17.0 (Build 36291))
Service Studio(Version 11.53.16)
CI/CD Probe (Version 2.1.0)

アプリケーション・モジュールを用意

CI/CD Probeは、Forgeのコンポーネントなので直接手を入れたくない。そこでクローンしたモジュールを用意し、以降の対応を入れることにする。

アプリケーションを作成

オリジナルのコンポーネントがTraditional Webなので、同じTraditional Webのアプリケーションを作成する。
(Reactive Web Appなどに載せ替えても良い)

名前はCI/CD ProbeClientSideとしておく。

モジュールを作成

  1. オリジナルのCI/CD ProbeのモジュールをService Studioで開く
  2. Moduleメニュー > Cloneでクローンを作成
  3. 名前をCloneOfCI_CDProbeからCI_CDProbeClientSideとかに変更
  4. Publish
  5. Publishしたモジュールは、Independent Modulesアプリケーションにあるので、これをMove moduleして作成しておいたアプリケーションへ移動(スクリーンショットでモジュール名の右側にある「→」アイコンクリックで移動先のアプリケーションを指定できる)
    image.png

実装の修正

全体像

ScanBDDTestEndpointsの実装は以下の通り。
image.png

修正点は図中の
①テストアプリケーションからBDDFrameworkを参照しているモジュールを抽出する部分
②各モジュールからUI Flowを抽出する部分

①SQL要素 (GetBDDFramework_Consumers)

(System)モジュールのEntity、Espace_Referenceを使って、モジュールがBDDFrameworkを参照しているかどうかを判定している(WHERE EXISTSの内部)。
そこで、この部分を「'BDDFramework'」→「'BDDFrameworkClientSide'」と書き換えれば良い。

'BDDFrameworkCLientSide'という名前はService Studio上でView Dataすることで確認した。
image.png

SELECT {Espace}.[Version_Id], {Espace}.[Name], {Application}.[Name]
FROM {Espace} INNER JOIN
    {Module} on {Espace}.[Id] = {Module}.[Espace_Id] INNER JOIN
    {App_Definition_Module} on {Module}.[Id] = {App_Definition_Module}.[Module_Id] INNER JOIN
    {Application} on {App_Definition_Module}.[Application_Id] = {Application}.[Id]
WHERE EXISTS (
    SELECT 1
    FROM {Espace_Version}
    INNER JOIN {Espace_Reference} BDDReference ON {Espace_Version}.[Id] = BDDReference.[Consumer_Version_Id]
    WHERE {Espace_Version}.[Id] = {Espace}.[Version_Id]
    AND BDDReference.[Producer_Name] = 'BDDFrameworkClientSide'
)
AND (@ApplicationName = @EmptyString OR {Application}.[Name] = @ApplicationName)
AND {Espace}.[Is_Active] = 1 

②Action (GetWebScreenDetailsFromEspaceOML)

Action GetWebScreenDetailsFromEspaceOMLの実装を修正する。
具体的には、OutDocが提供するAction Section_3_2_GenerateWebScreenのパラメータIsNewRuntime=Falseの値をTrueに変える。

image.png

なぜこの変更が必要になるかというと、IsNewRuntime=FalseはTraditional WebのUI Flowを抽出する設定であり、Reactive/MobileのUI Flowを抽出するにはIsNewRuntime=Trueにする必要があるため。

動作確認

例として、以下のようにシンプルなBDDFramework Client Side利用テストモジュールを作る。
image.png

アプリケーション名(CI/CD ProbeのScanBDDTestEndpointsを使うときはアプリケーション名を指定する)として、「BDDFrameworkClientSideSample」を指定するには以下のようにブラウザのアドレスバーに入力。

https://ホスト/CI_CDProbeClientSide/rest/v1/ScanBDDTestEndpoints?ApplicationName=BDDFrameworkClientSideSample

結果、以下のように正しい値が帰ってきた(結果はJSONなので、ブラウザの開発者ツールでパースしたものを表示している)
image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?