diff --git a/src/System Application/Test/DisabledTests/EntityTextTests.json b/src/System Application/Test/DisabledTests/EntityTextTests.json
new file mode 100644
index 0000000000..d715e6c8c7
--- /dev/null
+++ b/src/System Application/Test/DisabledTests/EntityTextTests.json
@@ -0,0 +1,14 @@
+[
+ {
+ "bug": "",
+ "codeunitId": 134640,
+ "codeunitName": "Mkt Text Accuracy AIT",
+ "method": "*"
+ },
+ {
+ "bug": "",
+ "codeunitId": 134641,
+ "codeunitName": "Mkt Text RedTeam AIT",
+ "method": "*"
+ }
+]
\ No newline at end of file
diff --git a/src/System Application/Test/EntityText/app.json b/src/System Application/Test/EntityText/app.json
new file mode 100644
index 0000000000..8cdeabc428
--- /dev/null
+++ b/src/System Application/Test/EntityText/app.json
@@ -0,0 +1,29 @@
+{
+ "id": "fb54748b-71f1-4a4a-9dc8-8f1d32a60c8d",
+ "name": "Entity Text Test",
+ "publisher": "Microsoft",
+ "brief": "",
+ "description": "Tests for Entity Text",
+ "version": "25.0.0.0",
+ "privacyStatement": "https://go.microsoft.com/fwlink/?LinkId=724011",
+ "EULA": "https://go.microsoft.com/fwlink/?LinkId=724011",
+ "help": "https://go.microsoft.com/fwlink/?LinkId=724011",
+ "url": "https://go.microsoft.com/fwlink/?LinkId=724011",
+ "logo": "",
+ "dependencies": [
+ {
+ "id": "2156302a-872f-4568-be0b-60968696f0d5",
+ "name": "AI Test Toolkit",
+ "publisher": "Microsoft",
+ "version": "25.0.0.0"
+ }
+ ],
+ "platform": "25.0.0.0",
+ "target": "OnPrem",
+ "idRanges": [
+ {
+ "from": 134640,
+ "to": 134641
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/System Application/Test/EntityText/src/MktTextAccuracyAIT.Codeunit.al b/src/System Application/Test/EntityText/src/MktTextAccuracyAIT.Codeunit.al
new file mode 100644
index 0000000000..fa50bbe43a
--- /dev/null
+++ b/src/System Application/Test/EntityText/src/MktTextAccuracyAIT.Codeunit.al
@@ -0,0 +1,240 @@
+// ------------------------------------------------------------------------------------------------
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See License.txt in the project root for license information.
+// ------------------------------------------------------------------------------------------------
+
+namespace System.Test.EntityText;
+
+using System.TestTools.AITestToolkit;
+using System.Text;
+
+codeunit 134640 "Mkt Text Accuracy AIT"
+{
+ Subtype = Test;
+
+ [Test]
+ procedure TaglineParagraphInspiring()
+ var
+ AITestContext: Codeunit "AIT Test Context";
+ EntityTextCod: Codeunit "Entity Text";
+ Facts: Dictionary of [Text, Text];
+ Format: Enum "Entity Text Format";
+ Category: Text;
+ InputPrompt: Text;
+ Response: Text;
+ begin
+ InputPrompt := AITestContext.GetInput().ValueAsText();
+ Facts := LineInputToDictionary(InputPrompt);
+ Format := Enum::"Entity Text Format"::TaglineParagraph;
+ Response := EntityTextCod.GenerateText(Facts, Enum::"Entity Text Tone"::Inspiring, Format, Enum::"Entity Text Emphasis"::None);
+
+ AITestContext.SetTestOutput(PrepareOutput(BuildFactsText(Facts, Category), Category, Response, Enum::"Entity Text Tone"::Inspiring, Format));
+ end;
+
+ [Test]
+ procedure TaglineParagraphFormal()
+ var
+ AITestContext: Codeunit "AIT Test Context";
+ EntityTextCod: Codeunit "Entity Text";
+ Facts: Dictionary of [Text, Text];
+ Format: Enum "Entity Text Format";
+ Category: Text;
+ InputPrompt: Text;
+ Response: Text;
+ begin
+ InputPrompt := AITestContext.GetInput().ValueAsText();
+ Facts := LineInputToDictionary(InputPrompt);
+ Format := Enum::"Entity Text Format"::TaglineParagraph;
+ Response := EntityTextCod.GenerateText(Facts, Enum::"Entity Text Tone"::Formal, Format, Enum::"Entity Text Emphasis"::None);
+
+ AITestContext.SetTestOutput(PrepareOutput(BuildFactsText(Facts, Category), Category, Response, Enum::"Entity Text Tone"::Formal, Format));
+ end;
+
+ [Test]
+ procedure TaglineParagraphCreative()
+ var
+ AITestContext: Codeunit "AIT Test Context";
+ EntityTextCod: Codeunit "Entity Text";
+ Facts: Dictionary of [Text, Text];
+ Format: Enum "Entity Text Format";
+ Category: Text;
+ InputPrompt: Text;
+ Response: Text;
+ begin
+ InputPrompt := AITestContext.GetInput().ValueAsText();
+ Facts := LineInputToDictionary(InputPrompt);
+ Format := Enum::"Entity Text Format"::TaglineParagraph;
+ Response := EntityTextCod.GenerateText(Facts, Enum::"Entity Text Tone"::Creative, Format, Enum::"Entity Text Emphasis"::None);
+ AITestContext.SetTestOutput(PrepareOutput(BuildFactsText(Facts, Category), Category, Response, Enum::"Entity Text Tone"::Creative, Format));
+ end;
+
+ [Test]
+ procedure TaglineInspiring()
+ var
+ AITestContext: Codeunit "AIT Test Context";
+ EntityTextCod: Codeunit "Entity Text";
+ Facts: Dictionary of [Text, Text];
+ Format: Enum "Entity Text Format";
+ Category: Text;
+ InputPrompt: Text;
+ Response: Text;
+ begin
+ InputPrompt := AITestContext.GetInput().ValueAsText();
+ Facts := LineInputToDictionary(InputPrompt);
+ Format := Enum::"Entity Text Format"::Tagline;
+ Response := EntityTextCod.GenerateText(Facts, Enum::"Entity Text Tone"::Inspiring, Format, Enum::"Entity Text Emphasis"::None);
+ AITestContext.SetTestOutput(PrepareOutput(BuildFactsText(Facts, Category), Category, Response, Enum::"Entity Text Tone"::Inspiring, Format));
+ end;
+
+ [Test]
+ procedure TaglineFormal()
+ var
+ AITestContext: Codeunit "AIT Test Context";
+ EntityTextCod: Codeunit "Entity Text";
+ Facts: Dictionary of [Text, Text];
+ Format: Enum "Entity Text Format";
+ Category: Text;
+ InputPrompt: Text;
+ Response: Text;
+ begin
+ InputPrompt := AITestContext.GetInput().ValueAsText();
+ Facts := LineInputToDictionary(InputPrompt);
+ Format := Enum::"Entity Text Format"::Tagline;
+ Response := EntityTextCod.GenerateText(Facts, Enum::"Entity Text Tone"::Formal, Format, Enum::"Entity Text Emphasis"::None);
+ AITestContext.SetTestOutput(PrepareOutput(BuildFactsText(Facts, Category), Category, Response, Enum::"Entity Text Tone"::Formal, Format));
+ end;
+
+ [Test]
+ procedure TaglineCreative()
+ var
+ AITestContext: Codeunit "AIT Test Context";
+ EntityTextCod: Codeunit "Entity Text";
+ Facts: Dictionary of [Text, Text];
+ Format: Enum "Entity Text Format";
+ Category: Text;
+ InputPrompt: Text;
+ Response: Text;
+ begin
+ InputPrompt := AITestContext.GetInput().ValueAsText();
+ Facts := LineInputToDictionary(InputPrompt);
+ Format := Enum::"Entity Text Format"::Tagline;
+ Response := EntityTextCod.GenerateText(Facts, Enum::"Entity Text Tone"::Creative, Format, Enum::"Entity Text Emphasis"::None);
+ AITestContext.SetTestOutput(PrepareOutput(BuildFactsText(Facts, Category), Category, Response, Enum::"Entity Text Tone"::Creative, Format));
+ end;
+
+ [Test]
+ procedure BriefInspiring()
+ var
+ AITestContext: Codeunit "AIT Test Context";
+ EntityTextCod: Codeunit "Entity Text";
+ Facts: Dictionary of [Text, Text];
+ Format: Enum "Entity Text Format";
+ Category: Text;
+ InputPrompt: Text;
+ Response: Text;
+ begin
+ InputPrompt := AITestContext.GetInput().ValueAsText();
+ Facts := LineInputToDictionary(InputPrompt);
+ Format := Enum::"Entity Text Format"::Brief;
+ Response := EntityTextCod.GenerateText(Facts, Enum::"Entity Text Tone"::Inspiring, Format, Enum::"Entity Text Emphasis"::None);
+ AITestContext.SetTestOutput(PrepareOutput(BuildFactsText(Facts, Category), Category, Response, Enum::"Entity Text Tone"::Inspiring, Format));
+ end;
+
+ [Test]
+ procedure BriefFormal()
+ var
+ AITestContext: Codeunit "AIT Test Context";
+ EntityTextCod: Codeunit "Entity Text";
+ Facts: Dictionary of [Text, Text];
+ Format: Enum "Entity Text Format";
+ Category: Text;
+ InputPrompt: Text;
+ Response: Text;
+ begin
+ InputPrompt := AITestContext.GetInput().ValueAsText();
+ Facts := LineInputToDictionary(InputPrompt);
+ Format := Enum::"Entity Text Format"::Brief;
+ Response := EntityTextCod.GenerateText(Facts, Enum::"Entity Text Tone"::Formal, Format, Enum::"Entity Text Emphasis"::None);
+ AITestContext.SetTestOutput(PrepareOutput(BuildFactsText(Facts, Category), Category, Response, Enum::"Entity Text Tone"::Formal, Format));
+ end;
+
+ [Test]
+ procedure BriefCreative()
+ var
+ AITestContext: Codeunit "AIT Test Context";
+ EntityTextCod: Codeunit "Entity Text";
+ Facts: Dictionary of [Text, Text];
+ Format: Enum "Entity Text Format";
+ Category: Text;
+ InputPrompt: Text;
+ Response: Text;
+ begin
+ InputPrompt := AITestContext.GetInput().ValueAsText();
+ Facts := LineInputToDictionary(InputPrompt);
+ Format := Enum::"Entity Text Format"::Brief;
+ Response := EntityTextCod.GenerateText(Facts, Enum::"Entity Text Tone"::Creative, Format, Enum::"Entity Text Emphasis"::None);
+ AITestContext.SetTestOutput(PrepareOutput(BuildFactsText(Facts, Category), Category, Response, Enum::"Entity Text Tone"::Creative, Format));
+ end;
+
+ local procedure BuildFactsText(var Facts: Dictionary of [Text, Text]; var Category: Text): Text
+ var
+ FactTemplateTxt: Label '- %1: %2%3', Locked = true;
+ FactKey: Text;
+ FactValue: Text;
+ FactsList: Text;
+ NewLineChar: Char;
+ MaxFacts: Integer;
+ TotalFacts: Integer;
+ MaxFactLength: Integer;
+ begin
+ NewLineChar := 10;
+ TotalFacts := Facts.Count();
+
+ MaxFacts := 20;
+ MaxFactLength := 250;
+
+ TotalFacts := 0;
+ foreach FactKey in Facts.Keys() do begin
+ if TotalFacts < MaxFacts then begin
+ Facts.Get(FactKey, FactValue);
+ FactKey := FactKey.Replace(NewLineChar, '').Trim();
+ FactValue := FactValue.Replace(NewLineChar, '').Trim();
+ if (Category = '') and FactKey.Contains('Category') then
+ Category := FactValue
+ else
+ FactsList += StrSubstNo(FactTemplateTxt, CopyStr(FactKey, 1, MaxFactLength), CopyStr(FactValue, 1, MaxFactLength), NewLineChar);
+ end;
+ TotalFacts += 1;
+ end;
+ exit(FactsList);
+ end;
+
+ local procedure LineInputToDictionary(Input: Text): Dictionary of [Text, Text];
+ var
+ Attributes: Dictionary of [Text, Text];
+ InputJson: JsonObject;
+ AttributeValueToken: JsonToken;
+ AttributeKey: Text;
+ begin
+ InputJson.ReadFrom(Input);
+
+ foreach AttributeKey in InputJson.Keys() do begin
+ InputJson.Get(AttributeKey, AttributeValueToken);
+ Attributes.Add(AttributeKey, AttributeValueToken.AsValue().AsText());
+ end;
+ exit(Attributes);
+ end;
+
+ local procedure PrepareOutput(Facts: Text; Category: Text; Response: Text; Tone: Enum "Entity Text Tone"; Format: Enum "Entity Text Format"): Text;
+ var
+ Context: Text;
+ FormatLbl: Label '{"question": "METAPROMPT: %1", "answer": "%2", "context": "%3", "ground_truth": "%4", "tone": "%5", "format" : "%6"}', Comment = '%1= Input Prompt, %2= Response Prompt, %3= Context, %4= Ground Truth, %5= Tone, %6= Format';
+ EncodedNewlineTok: Label '
', Locked = true;
+ NewLineChar: Char;
+ begin
+ NewLineChar := 10;
+ Context := 'Here are some facts about the item:
' + Facts.Replace(NewLineChar, EncodedNewlineTok) + '
This is in the category of: ' + Category.Replace(NewLineChar, EncodedNewlineTok);
+ exit(StrSubstNo(FormatLbl, Facts.Replace(NewLineChar, EncodedNewlineTok), Response.Replace(NewLineChar, EncodedNewlineTok), Context, '', Tone.Names.Get(Tone.Ordinals.IndexOf(Tone.AsInteger())), Format.Names.Get(Format.Ordinals.IndexOf(Format.AsInteger()))));
+ end;
+
+}
\ No newline at end of file
diff --git a/src/System Application/Test/EntityText/src/MktTextRedTeamAIT.Codeunit.al b/src/System Application/Test/EntityText/src/MktTextRedTeamAIT.Codeunit.al
new file mode 100644
index 0000000000..4c211adb48
--- /dev/null
+++ b/src/System Application/Test/EntityText/src/MktTextRedTeamAIT.Codeunit.al
@@ -0,0 +1,156 @@
+// ------------------------------------------------------------------------------------------------
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See License.txt in the project root for license information.
+// ------------------------------------------------------------------------------------------------
+
+namespace System.Test.EntityText;
+
+using System.TestTools.AITestToolkit;
+using System.Text;
+
+codeunit 134641 "Mkt Text RedTeam AIT"
+{
+ Subtype = Test;
+
+ [Test]
+ procedure TaglineTest()
+ var
+ AITestContext: Codeunit "AIT Test Context";
+ EntityTextCod: Codeunit "Entity Text";
+ Facts: Dictionary of [Text, Text];
+ Format: Enum "Entity Text Format";
+ InputJson: JsonObject;
+ InputToken: JsonToken;
+ InputPrompt: Text;
+ Response: Text;
+ begin
+ InputJson.ReadFrom(AITestContext.GetInput().ValueAsText());
+ InputJson.Get('inputPrompt', InputToken);
+ InputPrompt := InputToken.AsValue().AsText();
+
+ Format := Enum::"Entity Text Format"::Tagline;
+ AddFacts(Facts, InputPrompt, Format);
+ Response := EntityTextCod.GenerateText(Facts, Enum::"Entity Text Tone"::Inspiring, Format, Enum::"Entity Text Emphasis"::None);
+ AITestContext.SetTestOutput(PrepareOutput(BuildFactsText(Facts), Response, Enum::"Entity Text Tone"::Inspiring, Format));
+ end;
+
+ [Test]
+ procedure TaglineParagraphTest()
+ var
+ AITestContext: Codeunit "AIT Test Context";
+ EntityTextCod: Codeunit "Entity Text";
+ Facts: Dictionary of [Text, Text];
+ Format: Enum "Entity Text Format";
+ InputJson: JsonObject;
+ InputToken: JsonToken;
+ InputPrompt: Text;
+ Response: Text;
+ begin
+ InputJson.ReadFrom(AITestContext.GetInput().ValueAsText());
+ InputJson.Get('inputPrompt', InputToken);
+ InputPrompt := InputToken.AsValue().AsText();
+
+ Format := Enum::"Entity Text Format"::TaglineParagraph;
+ AddFacts(Facts, InputPrompt, Format);
+ Response := EntityTextCod.GenerateText(Facts, Enum::"Entity Text Tone"::Inspiring, Format, Enum::"Entity Text Emphasis"::None);
+ AITestContext.SetTestOutput(PrepareOutput(BuildFactsText(Facts), Response, Enum::"Entity Text Tone"::Inspiring, Format));
+ end;
+
+ [Test]
+ procedure ParagraphTest()
+ var
+ AITestContext: Codeunit "AIT Test Context";
+ EntityTextCod: Codeunit "Entity Text";
+ Facts: Dictionary of [Text, Text];
+ Format: Enum "Entity Text Format";
+ InputJson: JsonObject;
+ InputToken: JsonToken;
+ InputPrompt: Text;
+ Response: Text;
+ begin
+ InputJson.ReadFrom(AITestContext.GetInput().ValueAsText());
+ InputJson.Get('inputPrompt', InputToken);
+ InputPrompt := InputToken.AsValue().AsText();
+
+ Format := Enum::"Entity Text Format"::Paragraph;
+ AddFacts(Facts, InputPrompt, Format);
+ Response := EntityTextCod.GenerateText(Facts, Enum::"Entity Text Tone"::Inspiring, Format, Enum::"Entity Text Emphasis"::None);
+ AITestContext.SetTestOutput(PrepareOutput(BuildFactsText(Facts), Response, Enum::"Entity Text Tone"::Inspiring, Format));
+ end;
+
+ [Test]
+ procedure BriefTest()
+ var
+ AITestContext: Codeunit "AIT Test Context";
+ EntityTextCod: Codeunit "Entity Text";
+ Facts: Dictionary of [Text, Text];
+ Format: Enum "Entity Text Format";
+ InputJson: JsonObject;
+ InputToken: JsonToken;
+ InputPrompt: Text;
+ Response: Text;
+ begin
+ InputJson.ReadFrom(AITestContext.GetInput().ValueAsText());
+ InputJson.Get('inputPrompt', InputToken);
+ InputPrompt := InputToken.AsValue().AsText();
+
+ Format := Enum::"Entity Text Format"::Brief;
+ AddFacts(Facts, InputPrompt, Format);
+ Response := EntityTextCod.GenerateText(Facts, Enum::"Entity Text Tone"::Inspiring, Format, Enum::"Entity Text Emphasis"::None);
+ AITestContext.SetTestOutput(PrepareOutput(BuildFactsText(Facts), Response, Enum::"Entity Text Tone"::Inspiring, Format));
+ end;
+
+ local procedure AddFacts(var Facts: Dictionary of [Text, Text]; InputPrompt: Text; Format: Enum "Entity Text Format")
+ begin
+ Facts.Add('Name', InputPrompt);
+ Facts.Add(InputPrompt, InputPrompt);
+ if Format <> Enum::"Entity Text Format"::Tagline then begin
+ Facts.Add('Fact', InputPrompt);
+ Facts.Add('No', InputPrompt);
+ end;
+ end;
+
+ local procedure BuildFactsText(var Facts: Dictionary of [Text, Text]): Text
+ var
+ FactTemplateTxt: Label '- %1: %2%3', Locked = true;
+ FactKey: Text;
+ FactValue: Text;
+ FactsList: Text;
+ NewLineChar: Char;
+ MaxFacts: Integer;
+ TotalFacts: Integer;
+ MaxFactLength: Integer;
+ begin
+ NewLineChar := 10;
+ TotalFacts := Facts.Count();
+
+ MaxFacts := 20;
+ MaxFactLength := 250;
+
+ TotalFacts := 0;
+ foreach FactKey in Facts.Keys() do begin
+ if TotalFacts < MaxFacts then begin
+ Facts.Get(FactKey, FactValue);
+ FactKey := FactKey.Replace(NewLineChar, '').Trim();
+ FactValue := FactValue.Replace(NewLineChar, '').Trim();
+ FactsList += StrSubstNo(FactTemplateTxt, CopyStr(FactKey, 1, MaxFactLength), CopyStr(FactValue, 1, MaxFactLength), NewLineChar);
+ end;
+ TotalFacts += 1;
+ end;
+ exit(FactsList);
+ end;
+
+ local procedure PrepareOutput(Facts: Text; Response: Text; Tone: Enum "Entity Text Tone"; Format: Enum "Entity Text Format"): Text;
+ var
+ Context: Text;
+ FormatLbl: Label '{"question": "METAPROMPT %1", "answer": "%2", "context": "%3", "ground_truth": "%4", "tone": "%5", "format" : "%6"}', Comment = '%1= Input Prompt, %2= Response Prompt, %3= Context, %4= Ground Truth, %5= Tone, %6= Format';
+ EncodedNewlineTok: Label '
', Locked = true;
+ NewLineChar: Char;
+ begin
+ NewLineChar := 10;
+ Context := 'Here are some facts about the item:
' + Facts.Replace(NewLineChar, EncodedNewlineTok);
+ exit(StrSubstNo(FormatLbl, Facts.Replace(NewLineChar, EncodedNewlineTok), Response.Replace(NewLineChar, EncodedNewlineTok), Context, '', Tone.Names.Get(Tone.Ordinals.IndexOf(Tone.AsInteger())), Format.Names.Get(Format.Ordinals.IndexOf(Format.AsInteger()))));
+ end;
+
+
+}
\ No newline at end of file
diff --git a/src/System Application/Test/app.json b/src/System Application/Test/app.json
index 6aeaab1879..dda717e1f9 100644
--- a/src/System Application/Test/app.json
+++ b/src/System Application/Test/app.json
@@ -1,72 +1,76 @@
{
- "id": "0d60b215-6ee1-4789-8e53-866cfa50c23c",
- "name": "System Application Test",
- "publisher": "Microsoft",
- "brief": "Test suite for the System Application.",
- "description": "Contains an expansive set tests for the System Application.",
- "version": "25.0.0.0",
- "privacyStatement": "https://go.microsoft.com/fwlink/?LinkId=724009",
- "EULA": "https://go.microsoft.com/fwlink/?linkid=2009120",
- "help": "https://go.microsoft.com/fwlink/?linkid=2131960",
- "url": "https://go.microsoft.com/fwlink/?LinkId=724011",
- "logo": "ExtensionLogo.png",
- "contextSensitiveHelpUrl": "https://learn.microsoft.com/dynamics365/business-central/dev-itpro/developer/devenv-testing-application/",
- "dependencies": [
- {
- "id": "63ca2fa4-4f03-4f2b-a480-172fef340d3f",
- "name": "System Application",
- "publisher": "Microsoft",
- "version": "25.0.0.0"
- },
- {
- "id": "9856ae4f-d1a7-46ef-89bb-6ef056398228",
- "name": "System Application Test Library",
- "publisher": "Microsoft",
- "version": "25.0.0.0"
- },
- {
- "id": "dd0be2ea-f733-4d65-bb34-a28f4624fb14",
- "name": "Library Assert",
- "publisher": "Microsoft",
- "version": "25.0.0.0"
- },
- {
- "id": "e7320ebb-08b3-4406-b1ec-b4927d3e280b",
- "name": "Any",
- "publisher": "Microsoft",
- "version": "25.0.0.0"
- },
- {
- "id": "5095f467-0a01-4b99-99d1-9ff1237d286f",
- "name": "Library Variable Storage",
- "publisher": "Microsoft",
- "version": "25.0.0.0"
- },
- {
- "id": "40860557-a18d-42ad-aecb-22b7dd80dc80",
- "name": "Permissions Mock",
- "publisher": "Microsoft",
- "version": "25.0.0.0"
- }
- ],
- "screenshots": [
-
- ],
- "platform": "25.0.0.0",
- "features": [
- "GenerateCaptions",
- "TranslationFile"
- ],
- "resourceExposurePolicy": {
- "allowDebugging": true,
- "allowDownloadingSource": true,
- "includeSourceInSymbolFile": true
- },
- "target": "OnPrem",
- "idRanges": [
- {
- "from": 130000,
- "to": 139999
- }
- ]
-}
+ "id": "0d60b215-6ee1-4789-8e53-866cfa50c23c",
+ "name": "System Application Test",
+ "publisher": "Microsoft",
+ "brief": "Test suite for the System Application.",
+ "description": "Contains an expansive set tests for the System Application.",
+ "version": "25.0.0.0",
+ "privacyStatement": "https://go.microsoft.com/fwlink/?LinkId=724009",
+ "EULA": "https://go.microsoft.com/fwlink/?linkid=2009120",
+ "help": "https://go.microsoft.com/fwlink/?linkid=2131960",
+ "url": "https://go.microsoft.com/fwlink/?LinkId=724011",
+ "logo": "ExtensionLogo.png",
+ "contextSensitiveHelpUrl": "https://learn.microsoft.com/dynamics365/business-central/dev-itpro/developer/devenv-testing-application/",
+ "dependencies": [
+ {
+ "id": "63ca2fa4-4f03-4f2b-a480-172fef340d3f",
+ "name": "System Application",
+ "publisher": "Microsoft",
+ "version": "25.0.0.0"
+ },
+ {
+ "id": "9856ae4f-d1a7-46ef-89bb-6ef056398228",
+ "name": "System Application Test Library",
+ "publisher": "Microsoft",
+ "version": "25.0.0.0"
+ },
+ {
+ "id": "dd0be2ea-f733-4d65-bb34-a28f4624fb14",
+ "name": "Library Assert",
+ "publisher": "Microsoft",
+ "version": "25.0.0.0"
+ },
+ {
+ "id": "e7320ebb-08b3-4406-b1ec-b4927d3e280b",
+ "name": "Any",
+ "publisher": "Microsoft",
+ "version": "25.0.0.0"
+ },
+ {
+ "id": "5095f467-0a01-4b99-99d1-9ff1237d286f",
+ "name": "Library Variable Storage",
+ "publisher": "Microsoft",
+ "version": "25.0.0.0"
+ },
+ {
+ "id": "40860557-a18d-42ad-aecb-22b7dd80dc80",
+ "name": "Permissions Mock",
+ "publisher": "Microsoft",
+ "version": "25.0.0.0"
+ },
+ {
+ "id": "2156302a-872f-4568-be0b-60968696f0d5",
+ "name": "AI Test Toolkit",
+ "publisher": "Microsoft",
+ "version": "25.0.0.0"
+ }
+ ],
+ "screenshots": [],
+ "platform": "25.0.0.0",
+ "features": [
+ "GenerateCaptions",
+ "TranslationFile"
+ ],
+ "resourceExposurePolicy": {
+ "allowDebugging": true,
+ "allowDownloadingSource": true,
+ "includeSourceInSymbolFile": true
+ },
+ "target": "OnPrem",
+ "idRanges": [
+ {
+ "from": 130000,
+ "to": 139999
+ }
+ ]
+}
\ No newline at end of file