diff --git a/www/6695.b8d7c7fafbf2b866.js b/www/6695.b8d7c7fafbf2b866.js
new file mode 100644
index 0000000..d143122
--- /dev/null
+++ b/www/6695.b8d7c7fafbf2b866.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkapp=self.webpackChunkapp||[]).push([[6695],{5553:(T,_,r)=>{r.d(_,{h:()=>m});var c=r(177),g=r(7863),s=r(4438);let m=(()=>{var l;class e{}return(l=e).\u0275fac=function(u){return new(u||l)},l.\u0275mod=s.$C({type:l}),l.\u0275inj=s.G2t({imports:[c.MD,g.bv]}),e})()},3241:(T,_,r)=>{r.d(_,{p:()=>m});var c=r(4438),g=r(177),s=r(7863);let m=(()=>{var l;class e{constructor(u){this.location=u,this.title="Header Title"}ngOnInit(){}goBack(){this.location.back()}}return(l=e).\u0275fac=function(u){return new(u||l)(c.rXU(g.aZ))},l.\u0275cmp=c.VBU({type:l,selectors:[["app-header-return"]],inputs:{title:"title"},decls:6,vars:2,consts:[[3,"translucent"],["slot","start","menu","menu-id"],["name","arrow-back","slot","start",1,"p-4","bigger-icon",3,"click"]],template:function(u,C){1&u&&(c.j41(0,"ion-header",0)(1,"ion-toolbar"),c.nrm(2,"ion-menu-button",1),c.j41(3,"ion-icon",2),c.bIt("click",function(){return C.goBack()}),c.k0s(),c.j41(4,"ion-title"),c.EFF(5),c.k0s()()()),2&u&&(c.Y8G("translucent",!0),c.R7$(5),c.JRh(C.title))},dependencies:[s.eU,s.iq,s.MC,s.BC,s.ai],styles:[".bigger-icon[_ngcontent-%COMP%]{font-size:1.5em}"]}),e})()},6695:(T,_,r)=>{r.r(_),r.d(_,{CreateUnitTestPageModule:()=>I});var c=r(177),g=r(4341),s=r(7863),m=r(7650),l=r(467),e=r(4438),h=r(9032),u=r(201),C=r(2379),f=r(8453),y=r(3241),v=r(9549);function U(i,d){if(1&i&&(e.j41(0,"ion-select-option",12),e.EFF(1),e.k0s()),2&i){const o=d.$implicit;e.FS9("value",o),e.R7$(),e.JRh(o)}}function F(i,d){if(1&i&&(e.j41(0,"markdown",14),e.EFF(1),e.k0s()),2&i){const o=d.$implicit;e.R7$(),e.JRh(o.message)}}function b(i,d){if(1&i){const o=e.RV6();e.j41(0,"ion-col",4)(1,"ion-card",9)(2,"ion-card")(3,"ion-card-header")(4,"ion-card-title",10),e.EFF(5,"Choose a file to create a unit test"),e.k0s()(),e.j41(6,"ion-card-content")(7,"ion-card")(8,"ion-card-content")(9,"ion-select",11),e.bIt("ionChange",function(n){e.eBV(o);const a=e.XpG();return e.Njj(a.askForFile(n))}),e.Z7z(10,U,2,2,"ion-select-option",12,e.fX1),e.k0s()()()(),e.j41(12,"ion-card-header")(13,"ion-card-title",10),e.EFF(14,"DevProbeAI Auto-Generated Unit Test"),e.k0s()(),e.j41(15,"ion-card")(16,"ion-card-content",13),e.Z7z(17,F,2,1,"markdown",14,e.fX1),e.k0s()(),e.j41(19,"ion-card-header")(20,"ion-card-title",10),e.EFF(21,"Add A Title or Add the Class Name"),e.k0s()(),e.j41(22,"ion-card-content")(23,"ion-card")(24,"ion-input",15),e.mxI("ngModelChange",function(n){e.eBV(o);const a=e.XpG();return e.DH7(a.title,n)||(a.title=n),e.Njj(n)}),e.k0s()()()(),e.j41(25,"ion-button",16),e.bIt("click",function(){e.eBV(o);const n=e.XpG();return e.Njj(n.saveUnitTest())}),e.EFF(26,"Save Unit Test"),e.k0s()()()}if(2&i){const o=e.XpG();e.R7$(10),e.Dyx(o.files),e.R7$(7),e.Dyx(o.aiMessages),e.R7$(7),e.R50("ngModel",o.title)}}function P(i,d){if(1&i&&(e.j41(0,"markdown",14),e.EFF(1),e.k0s()),2&i){const o=d.$implicit;e.R7$(),e.JRh(o.message)}}function j(i,d){if(1&i){const o=e.RV6();e.j41(0,"ion-col",4)(1,"ion-card",9)(2,"ion-card")(3,"ion-card-header",17)(4,"ion-card-title",10),e.EFF(5,"Give Context To AI"),e.k0s(),e.j41(6,"ion-card-subtitle"),e.EFF(7,"Provide the AI with context to generate a unit test. Code snippets, descriptions, or examples are all helpful."),e.k0s()(),e.j41(8,"ion-card")(9,"ion-card-content")(10,"ion-textarea",18),e.mxI("ngModelChange",function(n){e.eBV(o);const a=e.XpG();return e.DH7(a.context,n)||(a.context=n),e.Njj(n)}),e.k0s()(),e.j41(11,"ion-button",16),e.bIt("click",function(){e.eBV(o);const n=e.XpG();return e.Njj(n.askForFile(n.context))}),e.EFF(12,"Ask AI For Help"),e.k0s()(),e.j41(13,"ion-card-header")(14,"ion-card-title",10),e.EFF(15,"DevProbeAI Auto-Generated Unit Test"),e.k0s()(),e.j41(16,"ion-card")(17,"ion-card-content",13),e.Z7z(18,P,2,1,"markdown",14,e.fX1),e.k0s()(),e.j41(20,"ion-card-header")(21,"ion-card-title",10),e.EFF(22,"Add A Title or Add the Class Name"),e.k0s()(),e.j41(23,"ion-card-content")(24,"ion-card")(25,"ion-input",15),e.mxI("ngModelChange",function(n){e.eBV(o);const a=e.XpG();return e.DH7(a.title,n)||(a.title=n),e.Njj(n)}),e.k0s()()()(),e.j41(26,"ion-button",16),e.bIt("click",function(){e.eBV(o);const n=e.XpG();return e.Njj(n.saveUnitTest())}),e.EFF(27,"Save Unit Test"),e.k0s()()()}if(2&i){const o=e.XpG();e.R7$(10),e.R50("ngModel",o.context),e.R7$(8),e.Dyx(o.aiMessages),e.R7$(7),e.R50("ngModel",o.title)}}function M(i,d){if(1&i){const o=e.RV6();e.j41(0,"ion-col",4)(1,"ion-card")(2,"ion-card")(3,"ion-card-header")(4,"ion-card-title",10),e.EFF(5,"My Unit Test"),e.k0s()(),e.j41(6,"ion-card")(7,"ion-card-content")(8,"ion-textarea",19),e.mxI("ngModelChange",function(n){e.eBV(o);const a=e.XpG();return e.DH7(a.myUnitTest,n)||(a.myUnitTest=n),e.Njj(n)}),e.k0s()()(),e.j41(9,"ion-card-header")(10,"ion-card-title",10),e.EFF(11,"Add A Title or Add the Class Name"),e.k0s()(),e.j41(12,"ion-card-content")(13,"ion-card")(14,"ion-input",20),e.mxI("ngModelChange",function(n){e.eBV(o);const a=e.XpG();return e.DH7(a.title,n)||(a.title=n),e.Njj(n)}),e.k0s()()(),e.j41(15,"ion-button",16),e.bIt("click",function(){e.eBV(o);const n=e.XpG();return e.Njj(n.saveUnitTest())}),e.EFF(16,"Save Unit Test"),e.k0s()()()()}if(2&i){const o=e.XpG();e.R7$(8),e.R50("ngModel",o.myUnitTest),e.R7$(6),e.R50("ngModel",o.title)}}const k=[{path:"",component:(()=>{var i;class d{constructor(t,n,a,p,x){this.loadingCtrl=t,this.githubService=n,this.alertCtrl=a,this.unitTestService=p,this.activatedRoute=x,this.segment="git",this.files=[],this.gitHubData={key:"",repo:"",branch:"",owner:""},this.aiMessages=[],this.vertexAI=(0,e.WQX)(h.L9),this.model=(0,h.oc)(this.vertexAI,{model:"gemini-1.5-flash"}),this.chat=this.model.startChat({history:[{role:"user",parts:[{text:"Hola desde ahora en adelante seras un ingeniero SRE y de QA, te llamas DevProbeAI. Por favor ayudame a crear un TEST UNITARIO para el siguiente archivo, limitate a solo programar, no me expliques nada"}]},{role:"model",parts:[{text:"Claro, soy DevProbeAI, puedo ayudarte con eso. Por favor enviame el contenido del archivo"}]}]}),this.myUnitTest="",this.title="",this.productObjective="",this.productStep=""}ngOnInit(){}ionViewWillEnter(){var t=this;return(0,l.A)(function*(){t.getProductFromParams(),yield t.getGitHubSync(),""!==t.gitHubData.key&&t.getFiles()})()}getProductFromParams(){this.activatedRoute.params.subscribe(t=>{this.productObjective=t.productObjective,this.productStep=t.step}),console.log(this.productObjective),console.log(this.productStep)}getGitHubSync(){var t=this;return(0,l.A)(function*(){yield t.showLoading();const n=localStorage.getItem("user")?JSON.parse(localStorage.getItem("user")||"{}"):null;if(!n)return;const a=n.orgName||"";if(t.gitHubData=yield t.githubService.getSyncRepo(a),console.log("this.gitHubData",t.gitHubData),!t.gitHubData||""===t.gitHubData.key)return yield t.hideLoading(),void(yield t.showAlert("If you want to use GitHub, please sync your repository in the settings page","No GitHub Sync found"));yield t.hideLoading()})()}getFiles(){var t=this;return(0,l.A)(function*(){yield t.showLoading(),t.files=yield t.githubService.getFiles(t.gitHubData),0===t.files.length&&(yield t.hideLoading(),yield t.showAlert("No files found in the repository, check sync settings","No Files Found")),yield t.hideLoading()})()}askForFile(t){var n=this;return(0,l.A)(function*(){yield n.showLoading();let a="";try{t.detail.value&&(console.log("file",t.detail.value),a=yield n.githubService.getContentFromFilePath(n.gitHubData,t.detail.value),console.log("content",a))}catch{a=t}yield n.chat.sendMessage(a).then(p=>{n.aiMessages=[],n.aiMessages.push({from:"ai",message:p.response.text(),id:"1"}),console.log("response",p)}),yield n.hideLoading()})()}saveUnitTest(){var t=this;return(0,l.A)(function*(){yield t.showLoading();const n=localStorage.getItem("user")?JSON.parse(localStorage.getItem("user")||"{}"):null;if(!n)return;const a=n.orgName||"";return t.myUnitTest&&""!==t.myUnitTest&&t.title&&""!==t.title?(yield t.unitTestService.addUnitTest(a,t.productObjective,t.productStep,{code:t.myUnitTest,state:!1,type:"unit-test",title:t.title}),yield t.hideLoading(),yield t.showAlert("Your Unit Test saved","Unit Test Saved"),void window.history.back()):t.aiMessages.length>0&&t.title&&""!==t.title?(yield t.unitTestService.addUnitTest(a,t.productObjective,t.productStep,{code:t.aiMessages[0].message,state:!1,type:"unit-test",title:t.title}),yield t.hideLoading(),yield t.showAlert("AI generated Unit Test saved","Unit Test Saved"),void window.history.back()):(yield t.hideLoading(),void(yield t.showAlert("Please ask AI or add your Unit Test before saving","No Unit Test Found")))})()}showLoading(){var t=this;return(0,l.A)(function*(){yield(yield t.loadingCtrl.create({})).present()})()}hideLoading(){var t=this;return(0,l.A)(function*(){yield t.loadingCtrl.dismiss()})()}showAlert(t,n){var a=this;return(0,l.A)(function*(){yield(yield a.alertCtrl.create({header:n,message:t,buttons:["OK"]})).present()})()}}return(i=d).\u0275fac=function(t){return new(t||i)(e.rXU(s.Xi),e.rXU(u.p),e.rXU(s.hG),e.rXU(C.I),e.rXU(m.nX))},i.\u0275cmp=e.VBU({type:i,selectors:[["app-create-unit-test"]],decls:23,vars:4,consts:[[3,"title"],[3,"fullscreen"],[1,"lg:m-10","md:m-10"],["size","12","size-md","4","size-lg","4",1,""],["size","12","size-md","12","size-lg","12",1,""],["value","default"],["value","default",3,"click"],["value","devprobeai",3,"click"],["value","myunittest",3,"click"],[1,"m-2","p-5"],[1,"text-white","text-3xl"],["label","Select File From GitHub Repo",3,"ionChange"],[3,"value"],[1,"m-2","p-2"],[1,"text-white"],["placeholder","Title or Class Name","type","text",1,"p-2","m-2",3,"ngModelChange","ngModel"],["color","primary","expand","block","fill","outline",3,"click"],[1,""],["placeholder","Paste Code",1,"w-full",3,"ngModelChange","ngModel"],["placeholder","Paste Code",1,"w-full","h-96",3,"ngModelChange","ngModel"],["placeholder","Title or Class Name","type","text",1,"p-2","m-2",3,"ngModelChange","ngModel"]],template:function(t,n){1&t&&(e.nrm(0,"app-header-return",0),e.j41(1,"ion-content",1)(2,"ion-grid"),e.nrm(3,"app-title",0),e.j41(4,"ion-row",2)(5,"ion-col",3)(6,"p"),e.EFF(7,"Unit tests are used to test individual units of code. They are typically written by developers to test the smallest piece of code, such as a function or method."),e.k0s()()(),e.j41(8,"ion-row",2)(9,"ion-col",4)(10,"ion-segment",5)(11,"ion-segment-button",6),e.bIt("click",function(){return n.segment="git"}),e.j41(12,"ion-label"),e.EFF(13,"GitHub + Dev Probe AI"),e.k0s()(),e.j41(14,"ion-segment-button",7),e.bIt("click",function(){return n.segment="devprobeai"}),e.j41(15,"ion-label"),e.EFF(16,"Dev Probe AI"),e.k0s()(),e.j41(17,"ion-segment-button",8),e.bIt("click",function(){return n.segment="myunittest"}),e.j41(18,"ion-label"),e.EFF(19,"My Unit Test"),e.k0s()()()(),e.DNE(20,b,27,1,"ion-col",4)(21,j,28,2)(22,M,17,2),e.k0s()()()),2&t&&(e.Y8G("title","Create Unit Test"),e.R7$(),e.Y8G("fullscreen",!0),e.R7$(2),e.Y8G("title","Create Unit Test"),e.R7$(17),e.vxM(20,"git"===n.segment?20:"devprobeai"===n.segment?21:"myunittest"===n.segment?22:-1))},dependencies:[g.BC,g.vS,s.Jm,s.b_,s.I9,s.ME,s.HW,s.tN,s.hU,s.W9,s.lO,s.$w,s.he,s.ln,s.Gp,s.eP,s.Nm,s.Ip,s.nc,s.Je,s.Gw,f.W,y.p,v.NN]}),d})()}];let R=(()=>{var i;class d{}return(i=d).\u0275fac=function(t){return new(t||i)},i.\u0275mod=e.$C({type:i}),i.\u0275inj=e.G2t({imports:[m.iI.forChild(k),m.iI]}),d})();var A=r(5553);let I=(()=>{var i;class d{}return(i=d).\u0275fac=function(t){return new(t||i)},i.\u0275mod=e.$C({type:i}),i.\u0275inj=e.G2t({imports:[c.MD,g.YN,s.bv,R,A.h,v.NN]}),d})()}}]);
\ No newline at end of file
diff --git a/www/8428.8952aae346a6be82.js b/www/8428.8952aae346a6be82.js
deleted file mode 100644
index 9d35fe9..0000000
--- a/www/8428.8952aae346a6be82.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkapp=self.webpackChunkapp||[]).push([[8428],{5553:(U,C,r)=>{r.d(C,{h:()=>_});var d=r(177),h=r(7863),s=r(4438);let _=(()=>{var l;class e{}return(l=e).\u0275fac=function(u){return new(u||l)},l.\u0275mod=s.$C({type:l}),l.\u0275inj=s.G2t({imports:[d.MD,h.bv]}),e})()},3241:(U,C,r)=>{r.d(C,{p:()=>_});var d=r(4438),h=r(177),s=r(7863);let _=(()=>{var l;class e{constructor(u){this.location=u,this.title="Header Title"}ngOnInit(){}goBack(){this.location.back()}}return(l=e).\u0275fac=function(u){return new(u||l)(d.rXU(h.aZ))},l.\u0275cmp=d.VBU({type:l,selectors:[["app-header-return"]],inputs:{title:"title"},decls:6,vars:2,consts:[[3,"translucent"],["slot","start","menu","menu-id"],["name","arrow-back","slot","start",1,"p-4","bigger-icon",3,"click"]],template:function(u,m){1&u&&(d.j41(0,"ion-header",0)(1,"ion-toolbar"),d.nrm(2,"ion-menu-button",1),d.j41(3,"ion-icon",2),d.bIt("click",function(){return m.goBack()}),d.k0s(),d.j41(4,"ion-title"),d.EFF(5),d.k0s()()()),2&u&&(d.Y8G("translucent",!0),d.R7$(5),d.JRh(m.title))},dependencies:[s.eU,s.iq,s.MC,s.BC,s.ai],styles:[".bigger-icon[_ngcontent-%COMP%]{font-size:1.5em}"]}),e})()},8428:(U,C,r)=>{r.r(C),r.d(C,{CreateUnitTestPageModule:()=>S});var d=r(177),h=r(4341),s=r(7863),_=r(7650),l=r(467),e=r(4438),p=r(9032),u=r(201),m=r(4262);let F=(()=>{var i;class c{constructor(t){this.firestore=t}addUnitTest(t,n,a,g){var f=this;return(0,l.A)(function*(){const T=(0,m.H9)(f.firestore,"teams",t,"products",n,"software_testing","unit_tests"),v=yield(0,m.x7)(T);if(v.exists()){const y=v.data()[a];console.log(y),y.push(g),yield(0,m.BN)(T,{[a]:y}),console.log("Document updated with ID: ",v.id)}else console.log("No such document!"),yield(0,m.BN)(T,{[a]:[g]}),console.log("Document created with ID: ",T.id)})()}}return(i=c).\u0275fac=function(t){return new(t||i)(e.KVO(m._7))},i.\u0275prov=e.jDH({token:i,factory:i.\u0275fac,providedIn:"root"}),c})();var j=r(8453),P=r(3241),b=r(9549);function M(i,c){if(1&i&&(e.j41(0,"ion-select-option",12),e.EFF(1),e.k0s()),2&i){const o=c.$implicit;e.FS9("value",o),e.R7$(),e.JRh(o)}}function k(i,c){if(1&i&&(e.j41(0,"markdown",14),e.EFF(1),e.k0s()),2&i){const o=c.$implicit;e.R7$(),e.JRh(o.message)}}function R(i,c){if(1&i){const o=e.RV6();e.j41(0,"ion-col",4)(1,"ion-card",9)(2,"ion-card")(3,"ion-card-header")(4,"ion-card-title",10),e.EFF(5,"Choose a file to create a unit test"),e.k0s()(),e.j41(6,"ion-card-content")(7,"ion-card")(8,"ion-card-content")(9,"ion-select",11),e.bIt("ionChange",function(n){e.eBV(o);const a=e.XpG();return e.Njj(a.askForFile(n))}),e.Z7z(10,M,2,2,"ion-select-option",12,e.fX1),e.k0s()()()(),e.j41(12,"ion-card-header")(13,"ion-card-title",10),e.EFF(14,"DevProbeAI Auto-Generated Unit Test"),e.k0s()(),e.j41(15,"ion-card")(16,"ion-card-content",13),e.Z7z(17,k,2,1,"markdown",14,e.fX1),e.k0s()(),e.j41(19,"ion-card-header")(20,"ion-card-title",10),e.EFF(21,"Add A Title or Add the Class Name"),e.k0s()(),e.j41(22,"ion-card-content")(23,"ion-card")(24,"ion-input",15),e.mxI("ngModelChange",function(n){e.eBV(o);const a=e.XpG();return e.DH7(a.title,n)||(a.title=n),e.Njj(n)}),e.k0s()()()(),e.j41(25,"ion-button",16),e.bIt("click",function(){e.eBV(o);const n=e.XpG();return e.Njj(n.saveUnitTest())}),e.EFF(26,"Save Unit Test"),e.k0s()()()}if(2&i){const o=e.XpG();e.R7$(10),e.Dyx(o.files),e.R7$(7),e.Dyx(o.aiMessages),e.R7$(7),e.R50("ngModel",o.title)}}function I(i,c){if(1&i&&(e.j41(0,"markdown",14),e.EFF(1),e.k0s()),2&i){const o=c.$implicit;e.R7$(),e.JRh(o.message)}}function A(i,c){if(1&i){const o=e.RV6();e.j41(0,"ion-col",4)(1,"ion-card",9)(2,"ion-card")(3,"ion-card-header",17)(4,"ion-card-title",10),e.EFF(5,"Give Context To AI"),e.k0s(),e.j41(6,"ion-card-subtitle"),e.EFF(7,"Provide the AI with context to generate a unit test. Code snippets, descriptions, or examples are all helpful."),e.k0s()(),e.j41(8,"ion-card")(9,"ion-card-content")(10,"ion-textarea",18),e.mxI("ngModelChange",function(n){e.eBV(o);const a=e.XpG();return e.DH7(a.context,n)||(a.context=n),e.Njj(n)}),e.k0s()(),e.j41(11,"ion-button",16),e.bIt("click",function(){e.eBV(o);const n=e.XpG();return e.Njj(n.askForFile(n.context))}),e.EFF(12,"Ask AI For Help"),e.k0s()(),e.j41(13,"ion-card-header")(14,"ion-card-title",10),e.EFF(15,"DevProbeAI Auto-Generated Unit Test"),e.k0s()(),e.j41(16,"ion-card")(17,"ion-card-content",13),e.Z7z(18,I,2,1,"markdown",14,e.fX1),e.k0s()(),e.j41(20,"ion-card-header")(21,"ion-card-title",10),e.EFF(22,"Add A Title or Add the Class Name"),e.k0s()(),e.j41(23,"ion-card-content")(24,"ion-card")(25,"ion-input",15),e.mxI("ngModelChange",function(n){e.eBV(o);const a=e.XpG();return e.DH7(a.title,n)||(a.title=n),e.Njj(n)}),e.k0s()()()(),e.j41(26,"ion-button",16),e.bIt("click",function(){e.eBV(o);const n=e.XpG();return e.Njj(n.saveUnitTest())}),e.EFF(27,"Save Unit Test"),e.k0s()()()}if(2&i){const o=e.XpG();e.R7$(10),e.R50("ngModel",o.context),e.R7$(8),e.Dyx(o.aiMessages),e.R7$(7),e.R50("ngModel",o.title)}}function x(i,c){if(1&i){const o=e.RV6();e.j41(0,"ion-col",4)(1,"ion-card")(2,"ion-card")(3,"ion-card-header")(4,"ion-card-title",10),e.EFF(5,"My Unit Test"),e.k0s()(),e.j41(6,"ion-card")(7,"ion-card-content")(8,"ion-textarea",19),e.mxI("ngModelChange",function(n){e.eBV(o);const a=e.XpG();return e.DH7(a.myUnitTest,n)||(a.myUnitTest=n),e.Njj(n)}),e.k0s()()(),e.j41(9,"ion-card-header")(10,"ion-card-title",10),e.EFF(11,"Add A Title or Add the Class Name"),e.k0s()(),e.j41(12,"ion-card-content")(13,"ion-card")(14,"ion-input",20),e.mxI("ngModelChange",function(n){e.eBV(o);const a=e.XpG();return e.DH7(a.title,n)||(a.title=n),e.Njj(n)}),e.k0s()()(),e.j41(15,"ion-button",16),e.bIt("click",function(){e.eBV(o);const n=e.XpG();return e.Njj(n.saveUnitTest())}),e.EFF(16,"Save Unit Test"),e.k0s()()()()}if(2&i){const o=e.XpG();e.R7$(8),e.R50("ngModel",o.myUnitTest),e.R7$(6),e.R50("ngModel",o.title)}}const E=[{path:"",component:(()=>{var i;class c{constructor(t,n,a,g,f){this.loadingCtrl=t,this.githubService=n,this.alertCtrl=a,this.unitTestService=g,this.activatedRoute=f,this.segment="git",this.files=[],this.gitHubData={key:"",repo:"",branch:"",owner:""},this.aiMessages=[],this.vertexAI=(0,e.WQX)(p.L9),this.model=(0,p.oc)(this.vertexAI,{model:"gemini-1.5-flash"}),this.chat=this.model.startChat({history:[{role:"user",parts:[{text:"Hola desde ahora en adelante seras un ingeniero SRE y de QA, te llamas DevProbeAI. Por favor ayudame a crear un TEST UNITARIO para el siguiente archivo, limitate a solo programar, no me expliques nada"}]},{role:"model",parts:[{text:"Claro, soy DevProbeAI, puedo ayudarte con eso. Por favor enviame el contenido del archivo"}]}]}),this.myUnitTest="",this.title="",this.productObjective="",this.productStep=""}ngOnInit(){}ionViewWillEnter(){var t=this;return(0,l.A)(function*(){t.getProductFromParams(),yield t.getGitHubSync(),""!==t.gitHubData.key&&t.getFiles()})()}getProductFromParams(){this.activatedRoute.params.subscribe(t=>{this.productObjective=t.productObjective,this.productStep=t.step}),console.log(this.productObjective),console.log(this.productStep)}getGitHubSync(){var t=this;return(0,l.A)(function*(){yield t.showLoading();const n=localStorage.getItem("user")?JSON.parse(localStorage.getItem("user")||"{}"):null;if(!n)return;const a=n.orgName||"";if(t.gitHubData=yield t.githubService.getSyncRepo(a),console.log("this.gitHubData",t.gitHubData),!t.gitHubData||""===t.gitHubData.key)return yield t.hideLoading(),void(yield t.showAlert("If you want to use GitHub, please sync your repository in the settings page","No GitHub Sync found"));yield t.hideLoading()})()}getFiles(){var t=this;return(0,l.A)(function*(){yield t.showLoading(),t.files=yield t.githubService.getFiles(t.gitHubData),0===t.files.length&&(yield t.hideLoading(),yield t.showAlert("No files found in the repository, check sync settings","No Files Found")),yield t.hideLoading()})()}askForFile(t){var n=this;return(0,l.A)(function*(){yield n.showLoading();let a="";try{t.detail.value&&(console.log("file",t.detail.value),a=yield n.githubService.getContentFromFilePath(n.gitHubData,t.detail.value),console.log("content",a))}catch{a=t}yield n.chat.sendMessage(a).then(g=>{n.aiMessages=[],n.aiMessages.push({from:"ai",message:g.response.text(),id:"1"}),console.log("response",g)}),yield n.hideLoading()})()}saveUnitTest(){var t=this;return(0,l.A)(function*(){yield t.showLoading();const n=localStorage.getItem("user")?JSON.parse(localStorage.getItem("user")||"{}"):null;if(!n)return;const a=n.orgName||"";return t.myUnitTest&&""!==t.myUnitTest&&t.title&&""!==t.title?(yield t.unitTestService.addUnitTest(a,t.productObjective,t.productStep,{code:t.myUnitTest,state:!1,type:"unit-test",title:t.title}),yield t.hideLoading(),yield t.showAlert("Your Unit Test saved","Unit Test Saved"),void window.history.back()):t.aiMessages.length>0&&t.title&&""!==t.title?(yield t.unitTestService.addUnitTest(a,t.productObjective,t.productStep,{code:t.aiMessages[0].message,state:!1,type:"unit-test",title:t.title}),yield t.hideLoading(),yield t.showAlert("AI generated Unit Test saved","Unit Test Saved"),void window.history.back()):(yield t.hideLoading(),void(yield t.showAlert("Please ask AI or add your Unit Test before saving","No Unit Test Found")))})()}showLoading(){var t=this;return(0,l.A)(function*(){yield(yield t.loadingCtrl.create({})).present()})()}hideLoading(){var t=this;return(0,l.A)(function*(){yield t.loadingCtrl.dismiss()})()}showAlert(t,n){var a=this;return(0,l.A)(function*(){yield(yield a.alertCtrl.create({header:n,message:t,buttons:["OK"]})).present()})()}}return(i=c).\u0275fac=function(t){return new(t||i)(e.rXU(s.Xi),e.rXU(u.p),e.rXU(s.hG),e.rXU(F),e.rXU(_.nX))},i.\u0275cmp=e.VBU({type:i,selectors:[["app-create-unit-test"]],decls:23,vars:4,consts:[[3,"title"],[3,"fullscreen"],[1,"lg:m-10","md:m-10"],["size","12","size-md","4","size-lg","4",1,""],["size","12","size-md","12","size-lg","12",1,""],["value","default"],["value","default",3,"click"],["value","devprobeai",3,"click"],["value","myunittest",3,"click"],[1,"m-2","p-5"],[1,"text-white","text-3xl"],["label","Select File From GitHub Repo",3,"ionChange"],[3,"value"],[1,"m-2","p-2"],[1,"text-white"],["placeholder","Title or Class Name","type","text",1,"p-2","m-2",3,"ngModelChange","ngModel"],["color","primary","expand","block","fill","outline",3,"click"],[1,""],["placeholder","Paste Code",1,"w-full",3,"ngModelChange","ngModel"],["placeholder","Paste Code",1,"w-full","h-96",3,"ngModelChange","ngModel"],["placeholder","Title or Class Name","type","text",1,"p-2","m-2",3,"ngModelChange","ngModel"]],template:function(t,n){1&t&&(e.nrm(0,"app-header-return",0),e.j41(1,"ion-content",1)(2,"ion-grid"),e.nrm(3,"app-title",0),e.j41(4,"ion-row",2)(5,"ion-col",3)(6,"p"),e.EFF(7,"Unit tests are used to test individual units of code. They are typically written by developers to test the smallest piece of code, such as a function or method."),e.k0s()()(),e.j41(8,"ion-row",2)(9,"ion-col",4)(10,"ion-segment",5)(11,"ion-segment-button",6),e.bIt("click",function(){return n.segment="git"}),e.j41(12,"ion-label"),e.EFF(13,"GitHub + Dev Probe AI"),e.k0s()(),e.j41(14,"ion-segment-button",7),e.bIt("click",function(){return n.segment="devprobeai"}),e.j41(15,"ion-label"),e.EFF(16,"Dev Probe AI"),e.k0s()(),e.j41(17,"ion-segment-button",8),e.bIt("click",function(){return n.segment="myunittest"}),e.j41(18,"ion-label"),e.EFF(19,"My Unit Test"),e.k0s()()()(),e.DNE(20,R,27,1,"ion-col",4)(21,A,28,2)(22,x,17,2),e.k0s()()()),2&t&&(e.Y8G("title","Create Unit Test"),e.R7$(),e.Y8G("fullscreen",!0),e.R7$(2),e.Y8G("title","Create Unit Test"),e.R7$(17),e.vxM(20,"git"===n.segment?20:"devprobeai"===n.segment?21:"myunittest"===n.segment?22:-1))},dependencies:[h.BC,h.vS,s.Jm,s.b_,s.I9,s.ME,s.HW,s.tN,s.hU,s.W9,s.lO,s.$w,s.he,s.ln,s.Gp,s.eP,s.Nm,s.Ip,s.nc,s.Je,s.Gw,j.W,P.p,b.NN]}),c})()}];let D=(()=>{var i;class c{}return(i=c).\u0275fac=function(t){return new(t||i)},i.\u0275mod=e.$C({type:i}),i.\u0275inj=e.G2t({imports:[_.iI.forChild(E),_.iI]}),c})();var N=r(5553);let S=(()=>{var i;class c{}return(i=c).\u0275fac=function(t){return new(t||i)},i.\u0275mod=e.$C({type:i}),i.\u0275inj=e.G2t({imports:[d.MD,h.YN,s.bv,D,N.h,b.NN]}),c})()}}]);
\ No newline at end of file
diff --git a/www/8711.a88558ca14bbdc9c.js b/www/8711.a88558ca14bbdc9c.js
deleted file mode 100644
index 450e058..0000000
--- a/www/8711.a88558ca14bbdc9c.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkapp=self.webpackChunkapp||[]).push([[8711],{5553:(j,g,o)=>{o.d(g,{h:()=>h});var l=o(177),y=o(7863),n=o(4438);let h=(()=>{var r;class e{}return(r=e).\u0275fac=function(u){return new(u||r)},r.\u0275mod=n.$C({type:r}),r.\u0275inj=n.G2t({imports:[l.MD,y.bv]}),e})()},3241:(j,g,o)=>{o.d(g,{p:()=>h});var l=o(4438),y=o(177),n=o(7863);let h=(()=>{var r;class e{constructor(u){this.location=u,this.title="Header Title"}ngOnInit(){}goBack(){this.location.back()}}return(r=e).\u0275fac=function(u){return new(u||r)(l.rXU(y.aZ))},r.\u0275cmp=l.VBU({type:r,selectors:[["app-header-return"]],inputs:{title:"title"},decls:6,vars:2,consts:[[3,"translucent"],["slot","start","menu","menu-id"],["name","arrow-back","slot","start",1,"p-4","bigger-icon",3,"click"]],template:function(u,S){1&u&&(l.j41(0,"ion-header",0)(1,"ion-toolbar"),l.nrm(2,"ion-menu-button",1),l.j41(3,"ion-icon",2),l.bIt("click",function(){return S.goBack()}),l.k0s(),l.j41(4,"ion-title"),l.EFF(5),l.k0s()()()),2&u&&(l.Y8G("translucent",!0),l.R7$(5),l.JRh(S.title))},dependencies:[n.eU,n.iq,n.MC,n.BC,n.ai],styles:[".bigger-icon[_ngcontent-%COMP%]{font-size:1.5em}"]}),e})()},8711:(j,g,o)=>{o.r(g),o.d(g,{SoftwareTestingChooserPageModule:()=>x});var l=o(177),y=o(4341),n=o(7863),h=o(7650),r=o(467),e=o(4438),f=o(9274),u=o(8453),S=o(3241),F=o(2820);function R(i,p){if(1&i){const m=e.RV6();e.j41(0,"ion-col",19)(1,"ion-card")(2,"ion-card-header")(3,"ion-card-title"),e.EFF(4),e.k0s()(),e.j41(5,"ion-card-content")(6,"ion-button",20),e.bIt("click",function(){const s=e.eBV(m).$implicit,a=e.XpG();return e.Njj(a.navigateToViewHistorySystemTest(s.title))}),e.EFF(7,"View Test Results"),e.k0s(),e.j41(8,"ion-button",21),e.bIt("click",function(){const s=e.eBV(m).$implicit,a=e.XpG();return e.Njj(a.navigateToExecuteSystemTest(s.title))}),e.EFF(9,"Execute Test"),e.k0s(),e.j41(10,"ion-button",22),e.bIt("click",function(){const s=e.eBV(m).$implicit,a=e.XpG();return e.Njj(a.deleteTest(s.title))}),e.EFF(11,"Delete Test"),e.k0s()()()()}if(2&i){const m=p.$implicit;e.R7$(4),e.JRh(m.title)}}const k=[{path:"",component:(()=>{var i;class p{constructor(t,s,a,d){this.activatedRoute=t,this.router=s,this.systemTestService=a,this.loadingCtrl=d,this.productStep="",this.productObjective="",this.user={},this.orgName="",this.systemTests=[],this.passedSystemTests=0,this.failedSystemTests=0,this.systemTestsChart={tooltip:{trigger:"axis"},legend:{data:["Passed","Failed"],left:"left"},xAxis:{type:"category",boundaryGap:!1,data:[]},yAxis:{type:"value"},series:[{name:"Passed",type:"line",data:[]},{name:"Failed",type:"line",data:[]}]}}ngOnInit(){}ionViewWillEnter(){var t=this;return(0,r.A)(function*(){t.getProductFromParams(),yield t.getSystemTests(),yield t.calculatePassedSystemTests(),yield t.calculateGraphDataSystemTests()})()}getProductFromParams(){this.activatedRoute.params.subscribe(t=>{this.productObjective=t.productObjective,this.productStep=t.step}),console.log(this.productObjective),console.log(this.productStep)}navigateToCreateSystemTest(){this.router.navigate(["/create-system-test",{productObjective:this.productObjective,step:this.productStep}])}navigateToCreateUnitTest(){this.router.navigate(["/create-unit-test",{productObjective:this.productObjective,step:this.productStep}])}navigateToExecuteSystemTest(t){this.router.navigate(["/execute-system-test",{productObjective:this.productObjective,step:this.productStep,testTitle:t}])}navigateToViewHistorySystemTest(t){this.router.navigate(["/view-history-system-test",{productObjective:this.productObjective,step:this.productStep,testTitle:t}])}calculatePassedSystemTests(){var t=this;return(0,r.A)(function*(){yield t.showLoading(),t.passedSystemTests=0,t.failedSystemTests=0,yield t.systemTestService.getSystemTestHistoryByStep(t.orgName,t.productObjective,t.productStep).then(s=>{s.forEach(a=>{a.state?t.passedSystemTests++:t.failedSystemTests++})}),yield t.hideLoading()})()}calculateGraphDataSystemTests(){var t=this;return(0,r.A)(function*(){yield t.showLoading(),yield t.systemTestService.getSystemTestHistory(t.orgName,t.productObjective).then(s=>{const a=Object.keys(s).filter(c=>s[c].productStep===t.productStep).map(c=>({timestamp:c,systemTest:s[c].systemTest}));a.sort((c,T)=>new Date(c.timestamp).getTime()-new Date(T.timestamp).getTime());let d=[];for(let c of a){let T=c.timestamp.split(" ")[0].split("-"),v=[T[2],T[1],T[0]];console.log(v);let C=v.join("/");console.log(C);let E=C+" "+c.timestamp.split(" ")[1];console.log(E);let P=new Date(E).toLocaleDateString(),b=c.systemTest.state?1:0,w=c.systemTest.state?0:1,_=d.findIndex(D=>D.date===P);-1===_?d.push({date:P,passed:b,failed:w}):(d[_].passed+=b,d[_].failed+=w)}console.log(d),t.systemTestsChart.xAxis={type:"category",boundaryGap:!1,data:d.map(c=>c.date)},t.systemTestsChart.series=[{name:"Passed",type:"line",data:d.map(c=>c.passed)},{name:"Failed",type:"line",data:d.map(c=>c.failed)}],console.log(t.systemTestsChart.xAxis.data),console.log(t.systemTestsChart.series[0].data),console.log(t.systemTestsChart.series[1].data),t.systemTestsChart={...t.systemTestsChart}}),yield t.hideLoading()})()}getSystemTests(){var t=this;return(0,r.A)(function*(){yield t.showLoading();const s=localStorage.getItem("user");s&&(t.user=JSON.parse(s),t.orgName=t.user.orgName,t.systemTestService.getSystemTest(t.orgName,t.productObjective,t.productStep).then(a=>{t.systemTests=a}),yield t.hideLoading())})()}deleteTest(t){var s=this;return(0,r.A)(function*(){let a=s.systemTests.find(d=>d.title===t);a&&(yield s.systemTestService.deleteSystemTest(s.orgName,s.productObjective,s.productStep,a).then((0,r.A)(function*(){yield s.getSystemTests()})),yield s.calculatePassedSystemTests(),yield s.calculateGraphDataSystemTests())})()}showLoading(){var t=this;return(0,r.A)(function*(){yield(yield t.loadingCtrl.create({})).present()})()}hideLoading(){var t=this;return(0,r.A)(function*(){yield t.loadingCtrl.dismiss()})()}doRefresh(t){this.getSystemTests(),t.target.complete()}}return(i=p).\u0275fac=function(t){return new(t||i)(e.rXU(h.nX),e.rXU(h.Ix),e.rXU(f.h),e.rXU(n.Xi))},i.\u0275cmp=e.VBU({type:i,selectors:[["app-software-testing-chooser"]],decls:86,vars:13,consts:[[3,"title"],[3,"fullscreen"],["slot","fixed",3,"ionRefresh"],[1,"lg:m-10","md:m-10"],["size","12","size-md","4","size-lg","4",1,""],[1,"min-h-full","flex","flex-col","justify-between"],[1,"text-3xl","text-white"],[1,"text-white"],[1,"mt-auto"],["color","primary","expand","block","fill","outline",3,"click"],["color","primary","expand","block","fill","outline"],["size","6","size-md","6","size-lg","6",1,""],[1,"flex","flex-col","justify-center","items-center","text-green-600"],[1,"flex","flex-col","justify-center","items-center"],[1,"flex","flex-col","justify-center","items-center","text-red-800"],["size","12","size-md","12","size-lg","12",1,""],[1,"h-[25em]"],["echarts","",1,"demo-chart","h-full","w-full","p-4",3,"options"],["size","12","size-md","3","size-lg","3","class","",4,"ngFor","ngForOf"],["size","12","size-md","3","size-lg","3",1,""],["color","primary","expand","block",3,"click"],["color","success","expand","block",3,"click"],["color","danger","expand","block",3,"click"]],template:function(t,s){1&t&&(e.nrm(0,"app-header-return",0),e.j41(1,"ion-content",1)(2,"ion-refresher",2),e.bIt("ionRefresh",function(d){return s.doRefresh(d)}),e.nrm(3,"ion-refresher-content"),e.k0s(),e.j41(4,"ion-grid"),e.nrm(5,"app-title",0),e.j41(6,"ion-row",3)(7,"ion-col",4)(8,"H2"),e.EFF(9,"Choose a type of test."),e.k0s(),e.nrm(10,"p"),e.k0s()(),e.j41(11,"ion-row",3)(12,"ion-col",4)(13,"ion-card",5)(14,"ion-card-header")(15,"h1",6),e.EFF(16,"Unit Tests"),e.k0s()(),e.j41(17,"ion-card-content")(18,"p",7),e.EFF(19,"A unit test is the smallest and simplest form of software testing. These tests are employed to assess a separable unit of software, such as a class or function, for correctness independent of the larger software system that contains the unit. Unit tests are also employed as a form of specification to ensure that a function or module exactly performs the behavior required by the system. Unit tests are commonly used to introduce test-driven development concepts."),e.k0s()(),e.j41(20,"ion-card-content",8)(21,"ion-button",9),e.bIt("click",function(){return s.navigateToCreateUnitTest()}),e.EFF(22,"Create Unit Test"),e.k0s()()()(),e.j41(23,"ion-col",4)(24,"ion-card",5)(25,"ion-card-header")(26,"h1",6),e.EFF(27,"Integration Tests"),e.k0s()(),e.j41(28,"ion-card-content")(29,"p",7),e.EFF(30,"Software components that pass individual unit tests are assembled into larger components. Engineers then run an integration test on an assembled component to verify that it functions correctly. Selenium, Playwright and Cypress are popular tools for integration testing."),e.k0s()(),e.j41(31,"ion-card-content",8)(32,"ion-button",10),e.EFF(33,"Create Integration Test"),e.k0s()()()(),e.j41(34,"ion-col",4)(35,"ion-card",5)(36,"ion-card-header")(37,"h1",6),e.EFF(38,"System Tests"),e.k0s()(),e.j41(39,"ion-card-content")(40,"p",7),e.EFF(41,"A system test is the largest scale test that engineers run for an undeployed system. All modules belonging to a specific component, such as a server that passed integration tests, are assembled into the system. Then the engineer tests the end-to-end functionality of the system."),e.k0s()(),e.j41(42,"ion-card-content",8)(43,"ion-button",9),e.bIt("click",function(){return s.navigateToCreateSystemTest()}),e.EFF(44,"Create System Test"),e.k0s()()()()()(),e.j41(45,"ion-grid"),e.nrm(46,"app-title",0),e.j41(47,"ion-row",3)(48,"ion-col",4)(49,"p"),e.EFF(50),e.k0s()()(),e.nrm(51,"app-title",0),e.j41(52,"ion-row",3)(53,"ion-col",4)(54,"p"),e.EFF(55),e.k0s()()(),e.nrm(56,"app-title",0),e.j41(57,"ion-row",3)(58,"ion-col",4)(59,"p"),e.EFF(60),e.k0s()()(),e.j41(61,"ion-row",3)(62,"ion-col",11)(63,"ion-card")(64,"ion-card-header")(65,"ion-card-title",12),e.EFF(66,"Passed Tests"),e.k0s()(),e.j41(67,"ion-card-content",13)(68,"h1"),e.EFF(69),e.k0s()()()(),e.j41(70,"ion-col",11)(71,"ion-card")(72,"ion-card-header")(73,"ion-card-title",14),e.EFF(74,"Failed Tests"),e.k0s()(),e.j41(75,"ion-card-content",13)(76,"h1"),e.EFF(77),e.k0s()()()()(),e.j41(78,"ion-row",3)(79,"ion-col",15)(80,"ion-card")(81,"ion-card-content",16),e.nrm(82,"div",17),e.k0s()()()()(),e.j41(83,"ion-grid")(84,"ion-row",3),e.DNE(85,R,12,1,"ion-col",18),e.k0s()()()),2&t&&(e.Y8G("title","Software Testing Chooser"),e.R7$(),e.Y8G("fullscreen",!0),e.R7$(4),e.Y8G("title","Software Testing Chooser"),e.R7$(41),e.Y8G("title","Unit Tests"),e.R7$(4),e.SpI("Created tests for product step: ",s.productStep,""),e.R7$(),e.Y8G("title","Integration Tests"),e.R7$(4),e.SpI("Created tests for product step: ",s.productStep,""),e.R7$(),e.Y8G("title","System Tests"),e.R7$(4),e.SpI("System tests results for product step: ",s.productStep,""),e.R7$(9),e.JRh(s.passedSystemTests),e.R7$(8),e.JRh(s.failedSystemTests),e.R7$(5),e.Y8G("options",s.systemTestsChart),e.R7$(3),e.Y8G("ngForOf",s.systemTests))},dependencies:[l.Sq,n.Jm,n.b_,n.I9,n.ME,n.tN,n.hU,n.W9,n.lO,n.To,n.Ki,n.ln,u.W,S.p,F.$P]}),p})()}];let O=(()=>{var i;class p{}return(i=p).\u0275fac=function(t){return new(t||i)},i.\u0275mod=e.$C({type:i}),i.\u0275inj=e.G2t({imports:[h.iI.forChild(k),h.iI]}),p})();var M=o(5553);let x=(()=>{var i;class p{}return(i=p).\u0275fac=function(t){return new(t||i)},i.\u0275mod=e.$C({type:i}),i.\u0275inj=e.G2t({imports:[l.MD,y.YN,n.bv,O,M.h]}),p})()}}]);
\ No newline at end of file
diff --git a/www/8711.b6318a0edfca7d2c.js b/www/8711.b6318a0edfca7d2c.js
new file mode 100644
index 0000000..91d9e23
--- /dev/null
+++ b/www/8711.b6318a0edfca7d2c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkapp=self.webpackChunkapp||[]).push([[8711],{5553:(C,g,i)=>{i.d(g,{h:()=>p});var l=i(177),T=i(7863),a=i(4438);let p=(()=>{var o;class e{}return(o=e).\u0275fac=function(u){return new(u||o)},o.\u0275mod=a.$C({type:o}),o.\u0275inj=a.G2t({imports:[l.MD,T.bv]}),e})()},3241:(C,g,i)=>{i.d(g,{p:()=>p});var l=i(4438),T=i(177),a=i(7863);let p=(()=>{var o;class e{constructor(u){this.location=u,this.title="Header Title"}ngOnInit(){}goBack(){this.location.back()}}return(o=e).\u0275fac=function(u){return new(u||o)(l.rXU(T.aZ))},o.\u0275cmp=l.VBU({type:o,selectors:[["app-header-return"]],inputs:{title:"title"},decls:6,vars:2,consts:[[3,"translucent"],["slot","start","menu","menu-id"],["name","arrow-back","slot","start",1,"p-4","bigger-icon",3,"click"]],template:function(u,y){1&u&&(l.j41(0,"ion-header",0)(1,"ion-toolbar"),l.nrm(2,"ion-menu-button",1),l.j41(3,"ion-icon",2),l.bIt("click",function(){return y.goBack()}),l.k0s(),l.j41(4,"ion-title"),l.EFF(5),l.k0s()()()),2&u&&(l.Y8G("translucent",!0),l.R7$(5),l.JRh(y.title))},dependencies:[a.eU,a.iq,a.MC,a.BC,a.ai],styles:[".bigger-icon[_ngcontent-%COMP%]{font-size:1.5em}"]}),e})()},8711:(C,g,i)=>{i.r(g),i.d(g,{SoftwareTestingChooserPageModule:()=>U});var l=i(177),T=i(4341),a=i(7863),p=i(7650),o=i(467),e=i(4438),f=i(9274),u=i(2379),y=i(8453),_=i(3241),b=i(2820);function w(c,m){if(1&c){const d=e.RV6();e.j41(0,"ion-col",19)(1,"ion-card")(2,"ion-card-header")(3,"ion-card-title"),e.EFF(4),e.k0s()(),e.j41(5,"ion-card-content")(6,"ion-button",20),e.bIt("click",function(){const s=e.eBV(d).$implicit,n=e.XpG();return e.Njj(n.navigateToViewHistorySystemTest(s.title))}),e.EFF(7,"View Test Results"),e.k0s(),e.j41(8,"ion-button",21),e.bIt("click",function(){const s=e.eBV(d).$implicit,n=e.XpG();return e.Njj(n.navigateToExecuteSystemTest(s.title))}),e.EFF(9,"Execute Test"),e.k0s(),e.j41(10,"ion-button",22),e.bIt("click",function(){const s=e.eBV(d).$implicit,n=e.XpG();return e.Njj(n.deleteTest(s.title))}),e.EFF(11,"Delete Test"),e.k0s()()()()}if(2&c){const d=m.$implicit;e.R7$(4),e.JRh(d.title)}}const R=[{path:"",component:(()=>{var c;class m{constructor(t,s,n,r,h){this.activatedRoute=t,this.router=s,this.systemTestService=n,this.loadingCtrl=r,this.unitTestService=h,this.productStep="",this.productObjective="",this.user={},this.orgName="",this.systemTests=[],this.unitTests=[],this.passedSystemTests=0,this.failedSystemTests=0,this.systemTestsChart={tooltip:{trigger:"axis"},legend:{data:["Passed","Failed"],left:"left"},xAxis:{type:"category",boundaryGap:!1,data:[]},yAxis:{type:"value"},series:[{name:"Passed",type:"line",data:[]},{name:"Failed",type:"line",data:[]}]}}ngOnInit(){}ionViewWillEnter(){var t=this;return(0,o.A)(function*(){yield t.showLoading(),t.getProductFromParams(),yield t.getUser(),yield t.getUnitTests();try{yield t.getSystemTests().then((0,o.A)(function*(){yield t.calculatePassedSystemTests().then((0,o.A)(function*(){yield t.calculateGraphDataSystemTests().then((0,o.A)(function*(){yield t.graphSystemTests()}))}))}))}catch(s){console.log(s)}yield t.hideLoading()})()}getProductFromParams(){this.activatedRoute.params.subscribe(t=>{this.productObjective=t.productObjective,this.productStep=t.step}),console.log(this.productObjective),console.log(this.productStep)}navigateToCreateSystemTest(){this.router.navigate(["/create-system-test",{productObjective:this.productObjective,step:this.productStep}])}navigateToCreateUnitTest(){this.router.navigate(["/create-unit-test",{productObjective:this.productObjective,step:this.productStep}])}navigateToExecuteSystemTest(t){this.router.navigate(["/execute-system-test",{productObjective:this.productObjective,step:this.productStep,testTitle:t}])}navigateToViewHistorySystemTest(t){this.router.navigate(["/view-history-system-test",{productObjective:this.productObjective,step:this.productStep,testTitle:t}])}calculatePassedUnitTests(){return(0,o.A)(function*(){})()}calculatePassedSystemTests(){var t=this;return(0,o.A)(function*(){t.passedSystemTests=0,t.failedSystemTests=0,yield t.systemTestService.getSystemTestHistoryByStep(t.orgName,t.productObjective,t.productStep).then(s=>{s.forEach(n=>{n.state?t.passedSystemTests++:t.failedSystemTests++})})})()}calculateGraphDataUnitTests(){return(0,o.A)(function*(){})()}calculateGraphDataSystemTests(){var t=this;return(0,o.A)(function*(){let s=[];const n=yield t.systemTestService.getSystemTestHistory(t.orgName,t.productObjective);return s=Object.keys(n).filter(r=>n[r].productStep===t.productStep).map(r=>({timestamp:r,systemTest:n[r].systemTest})),s})()}graphUnitTests(){return(0,o.A)(function*(){})()}graphSystemTests(){var t=this;return(0,o.A)(function*(){const s=yield t.calculateGraphDataSystemTests();let n=[];for(let r of s){let h=r.timestamp.split(" ")[0].split("-"),S=[h[2],h[1],h[0]].join("/"),A=r.timestamp.split(" ")[1],F=new Date(S+" "+A).toLocaleDateString(),P=r.systemTest.state?1:0,E=r.systemTest.state?0:1,v=n.findIndex(I=>I.date===F);-1===v?n.push({date:F,passed:P,failed:E}):(n[v].passed+=P,n[v].failed+=E)}n.sort((r,h)=>new Date(r.date)-new Date(h.date)),t.systemTestsChart.xAxis={type:"category",boundaryGap:!1,data:n.map(r=>r.date)},t.systemTestsChart.series=[{name:"Passed",type:"line",data:n.map(r=>r.passed)},{name:"Failed",type:"line",data:n.map(r=>r.failed)}],t.systemTestsChart={...t.systemTestsChart}})()}getUnitTests(){var t=this;return(0,o.A)(function*(){yield t.showLoading(),t.unitTestService.getUnitTests(t.orgName,t.productObjective,t.productStep).then(s=>{t.unitTests=s}),yield t.hideLoading()})()}getSystemTests(){var t=this;return(0,o.A)(function*(){t.systemTestService.getSystemTest(t.orgName,t.productObjective,t.productStep).then(s=>{t.systemTests=s})})()}getUser(){var t=this;return(0,o.A)(function*(){const s=localStorage.getItem("user");s&&(t.user=JSON.parse(s),t.orgName=t.user.orgName)})()}deleteTest(t){var s=this;return(0,o.A)(function*(){let n=s.systemTests.find(r=>r.title===t);n&&(yield s.systemTestService.deleteSystemTest(s.orgName,s.productObjective,s.productStep,n).then((0,o.A)(function*(){yield s.getSystemTests()})),yield s.calculatePassedSystemTests(),yield s.calculateGraphDataSystemTests())})()}showLoading(){var t=this;return(0,o.A)(function*(){yield(yield t.loadingCtrl.create({})).present()})()}hideLoading(){var t=this;return(0,o.A)(function*(){yield t.loadingCtrl.dismiss()})()}doRefresh(t){this.getSystemTests(),t.target.complete()}}return(c=m).\u0275fac=function(t){return new(t||c)(e.rXU(p.nX),e.rXU(p.Ix),e.rXU(f.h),e.rXU(a.Xi),e.rXU(u.I))},c.\u0275cmp=e.VBU({type:c,selectors:[["app-software-testing-chooser"]],decls:86,vars:13,consts:[[3,"title"],[3,"fullscreen"],["slot","fixed",3,"ionRefresh"],[1,"lg:m-10","md:m-10"],["size","12","size-md","4","size-lg","4",1,""],[1,"min-h-full","flex","flex-col","justify-between"],[1,"text-3xl","text-white"],[1,"text-white"],[1,"mt-auto"],["color","primary","expand","block","fill","outline",3,"click"],["color","primary","expand","block","fill","outline"],["size","6","size-md","6","size-lg","6",1,""],[1,"flex","flex-col","justify-center","items-center","text-green-600"],[1,"flex","flex-col","justify-center","items-center"],[1,"flex","flex-col","justify-center","items-center","text-red-800"],["size","12","size-md","12","size-lg","12",1,""],[1,"h-[25em]"],["echarts","",1,"demo-chart","h-full","w-full","p-4",3,"options"],["size","12","size-md","3","size-lg","3","class","",4,"ngFor","ngForOf"],["size","12","size-md","3","size-lg","3",1,""],["color","primary","expand","block",3,"click"],["color","success","expand","block",3,"click"],["color","danger","expand","block",3,"click"]],template:function(t,s){1&t&&(e.nrm(0,"app-header-return",0),e.j41(1,"ion-content",1)(2,"ion-refresher",2),e.bIt("ionRefresh",function(r){return s.doRefresh(r)}),e.nrm(3,"ion-refresher-content"),e.k0s(),e.j41(4,"ion-grid"),e.nrm(5,"app-title",0),e.j41(6,"ion-row",3)(7,"ion-col",4)(8,"H2"),e.EFF(9,"Choose a type of test."),e.k0s(),e.nrm(10,"p"),e.k0s()(),e.j41(11,"ion-row",3)(12,"ion-col",4)(13,"ion-card",5)(14,"ion-card-header")(15,"h1",6),e.EFF(16,"Unit Tests"),e.k0s()(),e.j41(17,"ion-card-content")(18,"p",7),e.EFF(19,"A unit test is the smallest and simplest form of software testing. These tests are employed to assess a separable unit of software, such as a class or function, for correctness independent of the larger software system that contains the unit. Unit tests are also employed as a form of specification to ensure that a function or module exactly performs the behavior required by the system. Unit tests are commonly used to introduce test-driven development concepts."),e.k0s()(),e.j41(20,"ion-card-content",8)(21,"ion-button",9),e.bIt("click",function(){return s.navigateToCreateUnitTest()}),e.EFF(22,"Create Unit Test"),e.k0s()()()(),e.j41(23,"ion-col",4)(24,"ion-card",5)(25,"ion-card-header")(26,"h1",6),e.EFF(27,"Integration Tests"),e.k0s()(),e.j41(28,"ion-card-content")(29,"p",7),e.EFF(30,"Software components that pass individual unit tests are assembled into larger components. Engineers then run an integration test on an assembled component to verify that it functions correctly. Selenium, Playwright and Cypress are popular tools for integration testing."),e.k0s()(),e.j41(31,"ion-card-content",8)(32,"ion-button",10),e.EFF(33,"Create Integration Test"),e.k0s()()()(),e.j41(34,"ion-col",4)(35,"ion-card",5)(36,"ion-card-header")(37,"h1",6),e.EFF(38,"System Tests"),e.k0s()(),e.j41(39,"ion-card-content")(40,"p",7),e.EFF(41,"A system test is the largest scale test that engineers run for an undeployed system. All modules belonging to a specific component, such as a server that passed integration tests, are assembled into the system. Then the engineer tests the end-to-end functionality of the system."),e.k0s()(),e.j41(42,"ion-card-content",8)(43,"ion-button",9),e.bIt("click",function(){return s.navigateToCreateSystemTest()}),e.EFF(44,"Create System Test"),e.k0s()()()()()(),e.j41(45,"ion-grid"),e.nrm(46,"app-title",0),e.j41(47,"ion-row",3)(48,"ion-col",4)(49,"p"),e.EFF(50),e.k0s()()(),e.nrm(51,"app-title",0),e.j41(52,"ion-row",3)(53,"ion-col",4)(54,"p"),e.EFF(55),e.k0s()()(),e.nrm(56,"app-title",0),e.j41(57,"ion-row",3)(58,"ion-col",4)(59,"p"),e.EFF(60),e.k0s()()(),e.j41(61,"ion-row",3)(62,"ion-col",11)(63,"ion-card")(64,"ion-card-header")(65,"ion-card-title",12),e.EFF(66,"Passed Tests"),e.k0s()(),e.j41(67,"ion-card-content",13)(68,"h1"),e.EFF(69),e.k0s()()()(),e.j41(70,"ion-col",11)(71,"ion-card")(72,"ion-card-header")(73,"ion-card-title",14),e.EFF(74,"Failed Tests"),e.k0s()(),e.j41(75,"ion-card-content",13)(76,"h1"),e.EFF(77),e.k0s()()()()(),e.j41(78,"ion-row",3)(79,"ion-col",15)(80,"ion-card")(81,"ion-card-content",16),e.nrm(82,"div",17),e.k0s()()()()(),e.j41(83,"ion-grid")(84,"ion-row",3),e.DNE(85,w,12,1,"ion-col",18),e.k0s()()()),2&t&&(e.Y8G("title","Software Testing Chooser"),e.R7$(),e.Y8G("fullscreen",!0),e.R7$(4),e.Y8G("title","Software Testing Chooser"),e.R7$(41),e.Y8G("title","Unit Tests"),e.R7$(4),e.SpI("Created tests for product step: ",s.productStep,""),e.R7$(),e.Y8G("title","Integration Tests"),e.R7$(4),e.SpI("Created tests for product step: ",s.productStep,""),e.R7$(),e.Y8G("title","System Tests"),e.R7$(4),e.SpI("System tests results for product step: ",s.productStep,""),e.R7$(9),e.JRh(s.passedSystemTests),e.R7$(8),e.JRh(s.failedSystemTests),e.R7$(5),e.Y8G("options",s.systemTestsChart),e.R7$(3),e.Y8G("ngForOf",s.systemTests))},dependencies:[l.Sq,a.Jm,a.b_,a.I9,a.ME,a.tN,a.hU,a.W9,a.lO,a.To,a.Ki,a.ln,y.W,_.p,b.$P]}),m})()}];let k=(()=>{var c;class m{}return(c=m).\u0275fac=function(t){return new(t||c)},c.\u0275mod=e.$C({type:c}),c.\u0275inj=e.G2t({imports:[p.iI.forChild(R),p.iI]}),m})();var O=i(5553);let U=(()=>{var c;class m{}return(c=m).\u0275fac=function(t){return new(t||c)},c.\u0275mod=e.$C({type:c}),c.\u0275inj=e.G2t({imports:[l.MD,T.YN,a.bv,k,O.h]}),m})()}}]);
\ No newline at end of file
diff --git a/www/common.0a48cb5ffd4526e3.js b/www/common.0a48cb5ffd4526e3.js
deleted file mode 100644
index 63ca84a..0000000
--- a/www/common.0a48cb5ffd4526e3.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkapp=self.webpackChunkapp||[]).push([[2076],{1263:(w,p,c)=>{c.d(p,{c:()=>m});var f=c(9672),i=c(1086),h=c(8607);const m=(l,a)=>{let r,s;const t=(o,d,_)=>{if(typeof document>"u")return;const v=document.elementFromPoint(o,d);v&&a(v)&&!v.disabled?v!==r&&(e(),n(v,_)):e()},n=(o,d)=>{r=o,s||(s=r);const _=r;(0,f.w)(()=>_.classList.add("ion-activated")),d()},e=(o=!1)=>{if(!r)return;const d=r;(0,f.w)(()=>d.classList.remove("ion-activated")),o&&s!==r&&r.click(),r=void 0};return(0,h.createGesture)({el:l,gestureName:"buttonActiveDrag",threshold:0,onStart:o=>t(o.currentX,o.currentY,i.a),onMove:o=>t(o.currentX,o.currentY,i.b),onEnd:()=>{e(!0),(0,i.h)(),s=void 0}})}},8438:(w,p,c)=>{c.d(p,{g:()=>i});var f=c(8476);const i=()=>{if(void 0!==f.w)return f.w.Capacitor}},5572:(w,p,c)=>{c.d(p,{c:()=>f,i:()=>i});const f=(h,m,l)=>"function"==typeof l?l(h,m):"string"==typeof l?h[l]===m[l]:Array.isArray(m)?m.includes(h):h===m,i=(h,m,l)=>void 0!==h&&(Array.isArray(h)?h.some(a=>f(a,m,l)):f(h,m,l))},3351:(w,p,c)=>{c.d(p,{g:()=>f});const f=(a,r,s,t,n)=>h(a[1],r[1],s[1],t[1],n).map(e=>i(a[0],r[0],s[0],t[0],e)),i=(a,r,s,t,n)=>n*(3*r*Math.pow(n-1,2)+n*(-3*s*n+3*s+t*n))-a*Math.pow(n-1,3),h=(a,r,s,t,n)=>l((t-=n)-3*(s-=n)+3*(r-=n)-(a-=n),3*s-6*r+3*a,3*r-3*a,a).filter(o=>o>=0&&o<=1),l=(a,r,s,t)=>{if(0===a)return((a,r,s)=>{const t=r*r-4*a*s;return t<0?[]:[(-r+Math.sqrt(t))/(2*a),(-r-Math.sqrt(t))/(2*a)]})(r,s,t);const n=(3*(s/=a)-(r/=a)*r)/3,e=(2*r*r*r-9*r*s+27*(t/=a))/27;if(0===n)return[Math.pow(-e,1/3)];if(0===e)return[Math.sqrt(-n),-Math.sqrt(-n)];const o=Math.pow(e/2,2)+Math.pow(n/3,3);if(0===o)return[Math.pow(e/2,.5)-r/3];if(o>0)return[Math.pow(-e/2+Math.sqrt(o),1/3)-Math.pow(e/2+Math.sqrt(o),1/3)-r/3];const d=Math.sqrt(Math.pow(-n/3,3)),_=Math.acos(-e/(2*Math.sqrt(Math.pow(-n/3,3)))),v=2*Math.pow(d,1/3);return[v*Math.cos(_/3)-r/3,v*Math.cos((_+2*Math.PI)/3)-r/3,v*Math.cos((_+4*Math.PI)/3)-r/3]}},5083:(w,p,c)=>{c.d(p,{i:()=>f});const f=i=>i&&""!==i.dir?"rtl"===i.dir.toLowerCase():"rtl"===(null==document?void 0:document.dir.toLowerCase())},3126:(w,p,c)=>{c.r(p),c.d(p,{startFocusVisible:()=>m});const f="ion-focused",h=["Tab","ArrowDown","Space","Escape"," ","Shift","Enter","ArrowLeft","ArrowRight","ArrowUp","Home","End"],m=l=>{let a=[],r=!0;const s=l?l.shadowRoot:document,t=l||document.body,n=g=>{a.forEach(u=>u.classList.remove(f)),g.forEach(u=>u.classList.add(f)),a=g},e=()=>{r=!1,n([])},o=g=>{r=h.includes(g.key),r||n([])},d=g=>{if(r&&void 0!==g.composedPath){const u=g.composedPath().filter(y=>!!y.classList&&y.classList.contains("ion-focusable"));n(u)}},_=()=>{s.activeElement===t&&n([])};return s.addEventListener("keydown",o),s.addEventListener("focusin",d),s.addEventListener("focusout",_),s.addEventListener("touchstart",e,{passive:!0}),s.addEventListener("mousedown",e),{destroy:()=>{s.removeEventListener("keydown",o),s.removeEventListener("focusin",d),s.removeEventListener("focusout",_),s.removeEventListener("touchstart",e),s.removeEventListener("mousedown",e)},setFocus:n}}},1086:(w,p,c)=>{c.d(p,{I:()=>i,a:()=>r,b:()=>s,c:()=>a,d:()=>n,h:()=>t});var f=c(8438),i=function(e){return e.Heavy="HEAVY",e.Medium="MEDIUM",e.Light="LIGHT",e}(i||{});const m={getEngine(){const e=(0,f.g)();if(null!=e&&e.isPluginAvailable("Haptics"))return e.Plugins.Haptics},available(){if(!this.getEngine())return!1;const o=(0,f.g)();return"web"!==(null==o?void 0:o.getPlatform())||typeof navigator<"u"&&void 0!==navigator.vibrate},impact(e){const o=this.getEngine();o&&o.impact({style:e.style})},notification(e){const o=this.getEngine();o&&o.notification({type:e.type})},selection(){this.impact({style:i.Light})},selectionStart(){const e=this.getEngine();e&&e.selectionStart()},selectionChanged(){const e=this.getEngine();e&&e.selectionChanged()},selectionEnd(){const e=this.getEngine();e&&e.selectionEnd()}},l=()=>m.available(),a=()=>{l()&&m.selection()},r=()=>{l()&&m.selectionStart()},s=()=>{l()&&m.selectionChanged()},t=()=>{l()&&m.selectionEnd()},n=e=>{l()&&m.impact(e)}},909:(w,p,c)=>{c.d(p,{I:()=>a,a:()=>n,b:()=>l,c:()=>d,d:()=>v,f:()=>e,g:()=>t,i:()=>s,p:()=>_,r:()=>g,s:()=>o});var f=c(467),i=c(4920),h=c(4929);const l="ion-content",a=".ion-content-scroll-host",r=`${l}, ${a}`,s=u=>"ION-CONTENT"===u.tagName,t=function(){var u=(0,f.A)(function*(y){return s(y)?(yield new Promise(D=>(0,i.c)(y,D)),y.getScrollElement()):y});return function(D){return u.apply(this,arguments)}}(),n=u=>u.querySelector(a)||u.querySelector(r),e=u=>u.closest(r),o=(u,y)=>s(u)?u.scrollToTop(y):Promise.resolve(u.scrollTo({top:0,left:0,behavior:y>0?"smooth":"auto"})),d=(u,y,D,M)=>s(u)?u.scrollByPoint(y,D,M):Promise.resolve(u.scrollBy({top:D,left:y,behavior:M>0?"smooth":"auto"})),_=u=>(0,h.b)(u,l),v=u=>{if(s(u)){const D=u.scrollY;return u.scrollY=!1,D}return u.style.setProperty("overflow","hidden"),!0},g=(u,y)=>{s(u)?u.scrollY=y:u.style.removeProperty("overflow")}},3992:(w,p,c)=>{c.d(p,{a:()=>f,b:()=>d,c:()=>r,d:()=>_,e:()=>A,f:()=>a,g:()=>v,h:()=>h,i:()=>i,j:()=>E,k:()=>P,l:()=>s,m:()=>e,n:()=>g,o:()=>n,p:()=>l,q:()=>m,r:()=>O,s:()=>T,t:()=>o,u:()=>D,v:()=>M,w:()=>t,x:()=>u,y:()=>y});const f="data:image/svg+xml;utf8,",i="data:image/svg+xml;utf8,",h="data:image/svg+xml;utf8,",m="data:image/svg+xml;utf8,",l="data:image/svg+xml;utf8,",a="data:image/svg+xml;utf8,",r="data:image/svg+xml;utf8,",s="data:image/svg+xml;utf8,",t="data:image/svg+xml;utf8,",n="data:image/svg+xml;utf8,",e="data:image/svg+xml;utf8,",o="data:image/svg+xml;utf8,",d="data:image/svg+xml;utf8,",_="data:image/svg+xml;utf8,",v="data:image/svg+xml;utf8,",g="data:image/svg+xml;utf8,",u="data:image/svg+xml;utf8,",y="data:image/svg+xml;utf8,",D="data:image/svg+xml;utf8,",M="data:image/svg+xml;utf8,",O="data:image/svg+xml;utf8,",E="data:image/svg+xml;utf8,",P="data:image/svg+xml;utf8,",T="data:image/svg+xml;utf8,",A="data:image/svg+xml;utf8,"},243:(w,p,c)=>{c.d(p,{c:()=>m,g:()=>l});var f=c(8476),i=c(4920),h=c(4929);const m=(r,s,t)=>{let n,e;if(void 0!==f.w&&"MutationObserver"in f.w){const v=Array.isArray(s)?s:[s];n=new MutationObserver(g=>{for(const u of g)for(const y of u.addedNodes)if(y.nodeType===Node.ELEMENT_NODE&&v.includes(y.slot))return t(),void(0,i.r)(()=>o(y))}),n.observe(r,{childList:!0,subtree:!0})}const o=v=>{var g;e&&(e.disconnect(),e=void 0),e=new MutationObserver(u=>{t();for(const y of u)for(const D of y.removedNodes)D.nodeType===Node.ELEMENT_NODE&&D.slot===s&&_()}),e.observe(null!==(g=v.parentElement)&&void 0!==g?g:v,{subtree:!0,childList:!0})},_=()=>{e&&(e.disconnect(),e=void 0)};return{destroy:()=>{n&&(n.disconnect(),n=void 0),_()}}},l=(r,s,t)=>{const n=null==r?0:r.toString().length,e=a(n,s);if(void 0===t)return e;try{return t(n,s)}catch(o){return(0,h.a)("Exception in provided `counterFormatter`.",o),e}},a=(r,s)=>`${r} / ${s}`},1622:(w,p,c)=>{c.r(p),c.d(p,{KEYBOARD_DID_CLOSE:()=>l,KEYBOARD_DID_OPEN:()=>m,copyVisualViewport:()=>O,keyboardDidClose:()=>u,keyboardDidOpen:()=>v,keyboardDidResize:()=>g,resetKeyboardAssist:()=>n,setKeyboardClose:()=>_,setKeyboardOpen:()=>d,startKeyboardAssist:()=>e,trackViewportChanges:()=>M});var f=c(4379);c(8438),c(8476);const m="ionKeyboardDidShow",l="ionKeyboardDidHide";let r={},s={},t=!1;const n=()=>{r={},s={},t=!1},e=E=>{if(f.K.getEngine())o(E);else{if(!E.visualViewport)return;s=O(E.visualViewport),E.visualViewport.onresize=()=>{M(E),v()||g(E)?d(E):u(E)&&_(E)}}},o=E=>{E.addEventListener("keyboardDidShow",P=>d(E,P)),E.addEventListener("keyboardDidHide",()=>_(E))},d=(E,P)=>{y(E,P),t=!0},_=E=>{D(E),t=!1},v=()=>!t&&r.width===s.width&&(r.height-s.height)*s.scale>150,g=E=>t&&!u(E),u=E=>t&&s.height===E.innerHeight,y=(E,P)=>{const A=new CustomEvent(m,{detail:{keyboardHeight:P?P.keyboardHeight:E.innerHeight-s.height}});E.dispatchEvent(A)},D=E=>{const P=new CustomEvent(l);E.dispatchEvent(P)},M=E=>{r=Object.assign({},s),s=O(E.visualViewport)},O=E=>({width:Math.round(E.width),height:Math.round(E.height),offsetTop:E.offsetTop,offsetLeft:E.offsetLeft,pageTop:E.pageTop,pageLeft:E.pageLeft,scale:E.scale})},4379:(w,p,c)=>{c.d(p,{K:()=>m,a:()=>h});var f=c(8438),i=function(l){return l.Unimplemented="UNIMPLEMENTED",l.Unavailable="UNAVAILABLE",l}(i||{}),h=function(l){return l.Body="body",l.Ionic="ionic",l.Native="native",l.None="none",l}(h||{});const m={getEngine(){const l=(0,f.g)();if(null!=l&&l.isPluginAvailable("Keyboard"))return l.Plugins.Keyboard},getResizeMode(){const l=this.getEngine();return null!=l&&l.getResizeMode?l.getResizeMode().catch(a=>{if(a.code!==i.Unimplemented)throw a}):Promise.resolve(void 0)}}},4731:(w,p,c)=>{c.d(p,{c:()=>a});var f=c(467),i=c(8476),h=c(4379);const m=r=>{if(void 0===i.d||r===h.a.None||void 0===r)return null;const s=i.d.querySelector("ion-app");return null!=s?s:i.d.body},l=r=>{const s=m(r);return null===s?0:s.clientHeight},a=function(){var r=(0,f.A)(function*(s){let t,n,e,o;const d=function(){var y=(0,f.A)(function*(){const D=yield h.K.getResizeMode(),M=void 0===D?void 0:D.mode;t=()=>{void 0===o&&(o=l(M)),e=!0,_(e,M)},n=()=>{e=!1,_(e,M)},null==i.w||i.w.addEventListener("keyboardWillShow",t),null==i.w||i.w.addEventListener("keyboardWillHide",n)});return function(){return y.apply(this,arguments)}}(),_=(y,D)=>{s&&s(y,v(D))},v=y=>{if(0===o||o===l(y))return;const D=m(y);return null!==D?new Promise(M=>{const E=new ResizeObserver(()=>{D.clientHeight===o&&(E.disconnect(),M())});E.observe(D)}):void 0};return yield d(),{init:d,destroy:()=>{null==i.w||i.w.removeEventListener("keyboardWillShow",t),null==i.w||i.w.removeEventListener("keyboardWillHide",n),t=n=void 0},isKeyboardVisible:()=>e}});return function(t){return r.apply(this,arguments)}}()},7838:(w,p,c)=>{c.d(p,{c:()=>i});var f=c(467);const i=()=>{let h;return{lock:function(){var l=(0,f.A)(function*(){const a=h;let r;return h=new Promise(s=>r=s),void 0!==a&&(yield a),r});return function(){return l.apply(this,arguments)}}()}}},9001:(w,p,c)=>{c.d(p,{c:()=>h});var f=c(8476),i=c(4920);const h=(m,l,a)=>{let r;const s=()=>!(void 0===l()||void 0!==m.label||null===a()),n=()=>{const o=l();if(void 0===o)return;if(!s())return void o.style.removeProperty("width");const d=a().scrollWidth;if(0===d&&null===o.offsetParent&&void 0!==f.w&&"IntersectionObserver"in f.w){if(void 0!==r)return;const _=r=new IntersectionObserver(v=>{1===v[0].intersectionRatio&&(n(),_.disconnect(),r=void 0)},{threshold:.01,root:m});_.observe(o)}else o.style.setProperty("width",.75*d+"px")};return{calculateNotchWidth:()=>{s()&&(0,i.r)(()=>{n()})},destroy:()=>{r&&(r.disconnect(),r=void 0)}}}},7895:(w,p,c)=>{c.d(p,{S:()=>i});const i={bubbles:{dur:1e3,circles:9,fn:(h,m,l)=>{const a=h*m/l-h+"ms",r=2*Math.PI*m/l;return{r:5,style:{top:32*Math.sin(r)+"%",left:32*Math.cos(r)+"%","animation-delay":a}}}},circles:{dur:1e3,circles:8,fn:(h,m,l)=>{const a=m/l,r=h*a-h+"ms",s=2*Math.PI*a;return{r:5,style:{top:32*Math.sin(s)+"%",left:32*Math.cos(s)+"%","animation-delay":r}}}},circular:{dur:1400,elmDuration:!0,circles:1,fn:()=>({r:20,cx:48,cy:48,fill:"none",viewBox:"24 24 48 48",transform:"translate(0,0)",style:{}})},crescent:{dur:750,circles:1,fn:()=>({r:26,style:{}})},dots:{dur:750,circles:3,fn:(h,m)=>({r:6,style:{left:32-32*m+"%","animation-delay":-110*m+"ms"}})},lines:{dur:1e3,lines:8,fn:(h,m,l)=>({y1:14,y2:26,style:{transform:`rotate(${360/l*m+(m({y1:12,y2:20,style:{transform:`rotate(${360/l*m+(m({y1:17,y2:29,style:{transform:`rotate(${30*m+(m<6?180:-180)}deg)`,"animation-delay":h*m/l-h+"ms"}})},"lines-sharp-small":{dur:1e3,lines:12,fn:(h,m,l)=>({y1:12,y2:20,style:{transform:`rotate(${30*m+(m<6?180:-180)}deg)`,"animation-delay":h*m/l-h+"ms"}})}}},7166:(w,p,c)=>{c.r(p),c.d(p,{createSwipeBackGesture:()=>l});var f=c(4920),i=c(5083),h=c(8607);c(1970);const l=(a,r,s,t,n)=>{const e=a.ownerDocument.defaultView;let o=(0,i.i)(a);const _=D=>o?-D.deltaX:D.deltaX;return(0,h.createGesture)({el:a,gestureName:"goback-swipe",gesturePriority:101,threshold:10,canStart:D=>(o=(0,i.i)(a),(D=>{const{startX:O}=D;return o?O>=e.innerWidth-50:O<=50})(D)&&r()),onStart:s,onMove:D=>{const O=_(D)/e.innerWidth;t(O)},onEnd:D=>{const M=_(D),O=e.innerWidth,E=M/O,P=(D=>o?-D.velocityX:D.velocityX)(D),A=P>=0&&(P>.2||M>O/2),L=(A?1-E:E)*O;let C=0;if(L>5){const R=L/Math.abs(P);C=Math.min(R,540)}n(A,E<=0?.01:(0,f.j)(0,E,.9999),C)}})}},2935:(w,p,c)=>{c.d(p,{w:()=>f});const f=(m,l,a)=>{if(typeof MutationObserver>"u")return;const r=new MutationObserver(s=>{a(i(s,l))});return r.observe(m,{childList:!0,subtree:!0}),r},i=(m,l)=>{let a;return m.forEach(r=>{for(let s=0;s{if(1!==m.nodeType)return;const a=m;return(a.tagName===l.toUpperCase()?[a]:Array.from(a.querySelectorAll(l))).find(s=>s.value===a.value)}},385:(w,p,c)=>{c.d(p,{l:()=>h});var f=c(4438),i=c(7863);let h=(()=>{var m;class l{constructor(){this.title="Header Title"}ngOnInit(){}}return(m=l).\u0275fac=function(r){return new(r||m)},m.\u0275cmp=f.VBU({type:m,selectors:[["app-header"]],inputs:{title:"title"},decls:5,vars:2,consts:[[3,"translucent"],["slot","start","menu","menu-id"]],template:function(r,s){1&r&&(f.j41(0,"ion-header",0)(1,"ion-toolbar"),f.nrm(2,"ion-menu-button",1),f.j41(3,"ion-title"),f.EFF(4),f.k0s()()()),2&r&&(f.Y8G("translucent",!0),f.R7$(4),f.JRh(s.title))},dependencies:[i.eU,i.MC,i.BC,i.ai]}),l})()},8453:(w,p,c)=>{c.d(p,{W:()=>h});var f=c(4438),i=c(7863);let h=(()=>{var m;class l{constructor(){this.title="Title"}ngOnInit(){}}return(m=l).\u0275fac=function(r){return new(r||m)},m.\u0275cmp=f.VBU({type:m,selectors:[["app-title"]],inputs:{title:"title"},decls:4,vars:1,consts:[[1,"lg:m-10"],["size","12","size-md","6","size-lg","6"],[1,"text-4xl","lg:text-6xl","font-bold"]],template:function(r,s){1&r&&(f.j41(0,"ion-row",0)(1,"ion-col",1)(2,"h1",2),f.EFF(3),f.k0s()()()),2&r&&(f.R7$(3),f.JRh(s.title))},dependencies:[i.hU,i.ln]}),l})()},4796:(w,p,c)=>{c.d(p,{u:()=>l});var f=c(467),i=c(8737),h=c(4262),m=c(4438);let l=(()=>{var a;class r{constructor(t,n){this.auth=t,this.firestore=n}registerUser(t){var n=this;return(0,f.A)(function*(){try{const e=yield(0,i.eJ)(n.auth,t.email,t.password);return e.user?(yield(0,h.BN)((0,h.H9)(n.firestore,"users",e.user.uid),{email:t.email,name:t.name,orgName:t.orgName,uid:e.user.uid}),yield(0,h.BN)((0,h.H9)(n.firestore,"teams",`${t.orgName}`),{name:t.orgName,members:[e.user.uid]}),e):null}catch{return null}})()}loginUser(t){var n=this;return(0,f.A)(function*(){try{var e;const o=yield(0,i.x9)(n.auth,t.email,t.password);if(null!==(e=o.user)&&void 0!==e&&e.uid){const d=yield(0,h.x7)((0,h.H9)(n.firestore,"users",o.user.uid));if(d.exists())return localStorage.setItem("user",JSON.stringify(d.data())),o}}catch(o){console.error(o)}return null})()}logoutUser(){var t=this;return(0,f.A)(function*(){yield t.auth.signOut()})()}addMember(t){var n=this;return(0,f.A)(function*(){try{const e=yield(0,i.eJ)(n.auth,t.email,t.password);if(!e.user)return!1;const o={email:t.email,name:t.name,orgName:t.orgName,uid:e.user.uid};return yield(0,h.BN)((0,h.H9)(n.firestore,"users",e.user.uid),o),o}catch{return!1}})()}}return(a=r).\u0275fac=function(t){return new(t||a)(m.KVO(i.Nj),m.KVO(h._7))},a.\u0275prov=m.jDH({token:a,factory:a.\u0275fac,providedIn:"root"}),r})()},6560:(w,p,c)=>{c.d(p,{x:()=>l});var f=c(467),i=c(4262),h=c(4438),m=c(1626);let l=(()=>{var a;class r{constructor(t,n){this.firestore=t,this.http=n,this.url_cpu="https://devprobeapi.onrender.com/flame_graph_date",this.url_mem="https://devprobeapi.onrender.com/flame_graph_memory_date"}getProducts(t){var n=this;return(0,f.A)(function*(){try{const e=(0,i.rJ)(n.firestore,"teams",t,"products");return(yield(0,i.GG)(e)).docs.map(d=>d.data())}catch(e){return console.log(e),[]}})()}getDates(t,n,e){var o=this;return(0,f.A)(function*(){try{e||(e="cpu_usage");const d=(0,i.rJ)(o.firestore,"teams",t,"products",n,e);return(yield(0,i.GG)(d)).docs.map(v=>v.id)}catch(d){return console.log(d),[]}})()}getFlameGraphByDate(t,n,e,o){var d=this;return(0,f.A)(function*(){try{let _={team:t,product:n,date:e};return o?yield d.http.post(d.url_mem,_).toPromise():yield d.http.post(d.url_cpu,_).toPromise()}catch{return{}}})()}}return(a=r).\u0275fac=function(t){return new(t||a)(h.KVO(i._7),h.KVO(m.Qq))},a.\u0275prov=h.jDH({token:a,factory:a.\u0275fac,providedIn:"root"}),r})()},201:(w,p,c)=>{c.d(p,{p:()=>l});var f=c(467),i=c(4262),h=c(4438),m=c(1626);let l=(()=>{var a;class r{constructor(t,n){this.firestore=t,this.httpClient=n,this.url="https://devprobeapi.onrender.com/"}syncRepo(t,n,e,o,d){var _=this;return(0,f.A)(function*(){const v=(0,i.H9)(_.firestore,"teams",t),g=yield(0,i.x7)(v);if(g.exists()){const u=g.data();u.gitHub={key:n,repo:e,branch:o,owner:d},yield(0,i.BN)(v,u)}})()}getSyncRepo(t){var n=this;return(0,f.A)(function*(){const e=(0,i.H9)(n.firestore,"teams",t),o=yield(0,i.x7)(e);return o.exists()?o.data().gitHub:null})()}getFiles(t){var n=this;return(0,f.A)(function*(){const e=yield n.httpClient.post(n.url+"github_repo",{auth:t.key,repo:t.repo,branch:t.branch,owner:t.owner}).toPromise();if(console.log(e),e){let o=e.paths;return o=o.filter(d=>!d.includes(".git")),o=o.filter(d=>!d.includes("node_modules")),o=o.filter(d=>!d.includes(".idea")),o=o.filter(d=>d.includes(".")),o}return[]})()}getContentFromFilePath(t,n){var e=this;return(0,f.A)(function*(){const o=yield e.httpClient.post(e.url+"github_file",{auth:t.key,repo:t.repo,owner:t.owner,path:n}).toPromise();return console.log(o),o?o.content:""})()}}return(a=r).\u0275fac=function(t){return new(t||a)(h.KVO(i._7),h.KVO(m.Qq))},a.\u0275prov=h.jDH({token:a,factory:a.\u0275fac,providedIn:"root"}),r})()},3661:(w,p,c)=>{c.d(p,{e:()=>l});var f=c(467),i=c(4438),h=c(4262),m=c(1626);let l=(()=>{var a;class r{constructor(t,n){this.firestore=t,this.http=n,this.ipApiURL="https://cors-ea3m.onrender.com/http://ip-api.com/json/"}getLocationDestSrc(t){var n=this;return(0,f.A)(function*(){var e,o,d,_,v,g,u,y;if(!t)return t;const D=n.http.get(n.ipApiURL+t.dst_addr).toPromise(),M=n.http.get(n.ipApiURL+t.src_addr).toPromise(),O=yield D,E=yield M;return t.dst_city=null!==(e=O.city)&&void 0!==e?e:"No city found",t.dst_country=null!==(o=O.country)&&void 0!==o?o:"No country found",t.dst_latitude=null!==(d=O.lat)&&void 0!==d?d:0,t.dst_longitude=null!==(_=O.lon)&&void 0!==_?_:0,t.src_city=null!==(v=E.city)&&void 0!==v?v:"No city found",t.src_country=null!==(g=E.country)&&void 0!==g?g:"No country found",t.src_latitude=null!==(u=E.lat)&&void 0!==u?u:0,t.src_longitude=null!==(y=E.lon)&&void 0!==y?y:0,t})()}getLocationFrom(t){var n=this;return(0,f.A)(function*(){if(!t)return t;let e=t.result;for(let g=0;g{c.d(p,{N:()=>l});var f=c(467),i=c(4262),h=c(4438),m=c(1626);let l=(()=>{var a;class r{constructor(t,n){this.firestore=t,this.http=n,this.ipApiURL="https://cors-ea3m.onrender.com/http://ip-api.com/json/"}getLocation(t){var n=this;return(0,f.A)(function*(){console.log(t);const o=yield n.http.get(n.ipApiURL+t[0].dst_addr).toPromise();for(let v=0;vn.http.get(n.ipApiURL+v.from).toPromise());return(yield Promise.all(d)).forEach((v,g)=>{t[g].fromLatitude=v.lat,t[g].fromLongitude=v.lon,t[g].cityFrom=v.city,t[g].countryFrom=v.country}),console.log(t),t})()}saveLocationResults(t,n,e,o){var d=this;return(0,f.A)(function*(){try{console.log(o,"ripeData");const _=(0,i.rJ)(d.firestore,"teams",t,"products",n,"ripe"),v=(0,i.H9)(_,e),g=o.map(u=>({from:u.from,dst_addr:u.dst_addr,latency:u.latency,cityFrom:u.cityFrom,countryFrom:u.countryFrom,cityTo:u.cityTo,countryTo:u.countryTo,fromLatitude:u.fromLatitude,fromLongitude:u.fromLongitude,toLatitude:u.toLatitude,toLongitude:u.toLongitude,id:u.id}));return yield(0,i.BN)(v,{data:g}),console.log("Data saved",{data:g}),!0}catch(_){return console.log(_),!1}})()}}return(a=r).\u0275fac=function(t){return new(t||a)(h.KVO(i._7),h.KVO(m.Qq))},a.\u0275prov=h.jDH({token:a,factory:a.\u0275fac,providedIn:"root"}),r})()},6241:(w,p,c)=>{c.d(p,{b:()=>m});var f=c(467),i=c(4262),h=c(4438);let m=(()=>{var l;class a{constructor(s){this.firestore=s}addProduct(s,t){var n=this;return(0,f.A)(function*(){try{console.log(s);const e=(0,i.H9)(n.firestore,"teams",t,"products",s.productObjective);return yield(0,i.BN)(e,s),!0}catch(e){return console.log(e),!1}})()}getProducts(s){var t=this;return(0,f.A)(function*(){try{const n=(0,i.rJ)(t.firestore,"teams",s,"products");return(yield(0,i.GG)(n)).docs.map(o=>o.data())}catch(n){return console.log(n),[]}})()}removeProduct(s,t){var n=this;return(0,f.A)(function*(){try{const e=(0,i.H9)(n.firestore,"teams",s,"products",t);return yield(0,i.kd)(e),!0}catch(e){return console.log(e),!1}})()}}return(l=a).\u0275fac=function(s){return new(s||l)(h.KVO(i._7))},l.\u0275prov=h.jDH({token:l,factory:l.\u0275fac,providedIn:"root"}),a})()},2588:(w,p,c)=>{c.d(p,{N:()=>l});var f=c(467),i=c(4262),h=c(4438),m=c(1626);let l=(()=>{var a;class r{constructor(t,n){this.http=t,this.firestore=n,this.measurementsUrl="https://cors-ea3m.onrender.com/https://atlas.ripe.net/api/v2/measurements/",this.measurementID=""}sendTraceRequest(t,n,e,o){var d=this;return(0,f.A)(function*(){console.log("Sending trace request");try{let _={definitions:[{target:t,description:n,type:e,af:4,is_oneoff:!0,protocol:"TCP"}],probes:[]};console.log(o);let v=o.split(",").length-1,g=(o=o.slice(0,-1)).split(","),u=[];for(let M=0;M({id:d.measurementID,dst_addr:u.dst_addr,dst_city:u.dst_city,dst_country:u.dst_country,dst_latitude:u.dst_latitude,dst_longitude:u.dst_longitude,src_addr:u.src_addr,src_city:u.src_city,src_country:u.src_country,src_latitude:u.src_latitude,src_longitude:u.src_longitude,result:u.result}));return yield(0,i.BN)(v,{data:g}),!0}catch(_){return console.log(_),!1}})()}getHistoryResults(t,n){var e=this;return(0,f.A)(function*(){const d=(0,i.rJ)(e.firestore,"teams/"+t+"/products/"+n+"/ripe_trace"),_=yield(0,i.GG)(d);let v=[];return _.docs.forEach(g=>{v.push({id:g.id,data:g.data()})}),console.log(v),v})()}getAllResultsByDescription(t,n,e){var o=this;return(0,f.A)(function*(){try{let d="teams/"+t+"/products/"+n+"/ripe_trace";console.log(d);let _=(0,i.H9)(o.firestore,d,e);return(yield(0,i.x7)(_)).data()}catch(d){return console.log(d),[]}})()}}return(a=r).\u0275fac=function(t){return new(t||a)(h.KVO(m.Qq),h.KVO(i._7))},a.\u0275prov=h.jDH({token:a,factory:a.\u0275fac,providedIn:"root"}),r})()},9640:(w,p,c)=>{c.d(p,{Q:()=>a});var f=c(467),i=c(1985),h=c(4262),m=c(4438),l=c(1626);let a=(()=>{var r;class s{constructor(n,e){this.http=n,this.firestore=e,this.measurementsUrl="https://cors-ea3m.onrender.com/https://atlas.ripe.net/api/v2/measurements/",this.measurementID=""}sendMeasurementRequest(n,e,o,d){var _=this;return(0,f.A)(function*(){let v=d.split(",").length-1;d=d.slice(0,-1);try{let g={definitions:[{target:n,description:"ping",type:"ping",af:4,is_oneoff:!0}],probes:[{requested:v,type:"probes",value:d}]},u={Authorization:"Key 92530695-134f-4cbc-b7c3-ec130f3719b0"};console.log(g);let y=yield _.http.post(_.measurementsUrl,g,{headers:u}).toPromise();return console.log(y),_.measurementID=y.measurements[0],_.measurementID}catch(g){return console.log(g),!1}})()}getMeasurementResults(n){var e=this;return(0,f.A)(function*(){n&&(e.measurementID=n);try{let o={Authorization:"Key 92530695-134f-4cbc-b7c3-ec130f3719b0"};return""===e.measurementID?(console.log("No measurement ID"),!1):e.http.get(e.measurementsUrl+e.measurementID+"/results/",{headers:o})}catch(o){return console.log(o),new i.c}})()}saveMeasurementResults(n,e,o,d){var _=this;return(0,f.A)(function*(){try{const v=(0,h.rJ)(_.firestore,"teams",n,"products",e,"ripe"),g=(0,h.H9)(v,o),u=d.map((y,D)=>({id:_.measurementID,from:y.from,dst_addr:y.dst_addr,latency:y.latency}));return yield(0,h.BN)(g,{data:u}),!0}catch(v){return console.log(v),!1}})()}getAllResultsByDescription(n,e,o){var d=this;return(0,f.A)(function*(){try{let _="teams/"+n+"/products/"+e+"/ripe";console.log(_);let v=(0,h.H9)(d.firestore,_,o);return(yield(0,h.x7)(v)).data()}catch(_){return console.log(_),[]}})()}getHistoryResults(n,e){var o=this;return(0,f.A)(function*(){const _=(0,h.rJ)(o.firestore,"teams/"+n+"/products/"+e+"/ripe"),v=yield(0,h.GG)(_);let g=[];return v.docs.forEach(u=>{g.push({id:u.id,data:u.data()})}),console.log(g),g})()}deleteHistory(n,e,o){var d=this;return(0,f.A)(function*(){const v=(0,h.H9)(d.firestore,"teams/"+n+"/products/"+e+"/ripe",o);try{return yield(0,h.kd)(v),!0}catch(g){return console.log(g),!1}})()}}return(r=s).\u0275fac=function(n){return new(n||r)(m.KVO(l.Qq),m.KVO(h._7))},r.\u0275prov=m.jDH({token:r,factory:r.\u0275fac,providedIn:"root"}),s})()},9274:(w,p,c)=>{c.d(p,{h:()=>m});var f=c(467),i=c(4262),h=c(4438);let m=(()=>{var l;class a{constructor(s){this.firestore=s}addSystemTest(s,t,n,e){var o=this;return(0,f.A)(function*(){const d=(0,i.H9)(o.firestore,"teams",s,"products",t,"software_testing","system_tests"),_=yield(0,i.x7)(d);if(_.exists()){const g=_.data()[n];console.log(g),g.push(e),yield(0,i.BN)(d,{[n]:g}),console.log("Document updated with ID: ",_.id)}else console.log("No such document!"),yield(0,i.BN)(d,{[n]:[e]}),console.log("Document created with ID: ",d.id)})()}getSystemTest(s,t,n){var e=this;return(0,f.A)(function*(){const o=(0,i.H9)(e.firestore,"teams",s,"products",t,"software_testing","system_tests"),d=yield(0,i.x7)(o);return d.exists()?d.data()[n]:[]})()}saveSystemTest(s,t,n,e){var o=this;return(0,f.A)(function*(){const d=(0,i.H9)(o.firestore,"teams",s,"products",t,"software_testing","system_tests_history"),_=new Date,v=`${_.getFullYear()}-${_.getMonth()+1}-${_.getDate()} ${_.getHours()}:${_.getMinutes()}:${_.getSeconds()}`;console.log(v);const g=yield(0,i.x7)(d);if(g.exists()){let u=g.data();u[v]={systemTest:e},u[v].productStep=n,yield(0,i.BN)(d,u)}else yield(0,i.BN)(d,{[v]:{systemTest:e,productStep:n}})})()}getSystemTestHistoryByStep(s,t,n){var e=this;return(0,f.A)(function*(){const o=(0,i.H9)(e.firestore,"teams",s,"products",t,"software_testing","system_tests_history"),d=yield(0,i.x7)(o);if(d.exists()){const _=d.data();return Object.keys(_).filter(g=>_[g].productStep===n).map(g=>_[g].systemTest)}return[]})()}getSystemTestHistoryByTitle(s,t,n,e){var o=this;return(0,f.A)(function*(){const d=(0,i.H9)(o.firestore,"teams",s,"products",t,"software_testing","system_tests_history"),_=yield(0,i.x7)(d);let v=[];if(_.exists()){const g=_.data();for(let u in g)g[u].systemTest.title===e&&g[u].productStep===n&&v.push({timestamp:u,systemTest:g[u].systemTest})}return v})()}getSystemTestByTimestamp(s,t,n,e,o){var d=this;return(0,f.A)(function*(){const _=(0,i.H9)(d.firestore,"teams",s,"products",t,"software_testing","system_tests_history"),v=yield(0,i.x7)(_);if(v.exists()){const g=v.data();for(let u in g)if(g[u].systemTest.title===e&&u===o&&g[u].productStep===n)return g[u].systemTest}return{}})()}deleteSystemTestHistoryByKey(s,t,n,e,o){var d=this;return(0,f.A)(function*(){const _=(0,i.H9)(d.firestore,"teams",s,"products",t,"software_testing","system_tests_history"),v=yield(0,i.x7)(_);if(v.exists()){const g=v.data();for(let u in g)g[u].systemTest.title===e&&u===o&&g[u].productStep===n&&delete g[u];yield(0,i.BN)(_,g)}})()}getSystemTestHistory(s,t){var n=this;return(0,f.A)(function*(){const e=(0,i.H9)(n.firestore,"teams",s,"products",t,"software_testing","system_tests_history"),o=yield(0,i.x7)(e);return o.exists()?o.data():{}})()}deleteSystemTest(s,t,n,e){var o=this;return(0,f.A)(function*(){let d=(0,i.H9)(o.firestore,"teams",s,"products",t,"software_testing","system_tests"),_=yield(0,i.x7)(d);if(_.exists()){let g=_.data()[n],u=g.indexOf(e);g.splice(u,1),yield(0,i.BN)(d,{[n]:g})}if(d=(0,i.H9)(o.firestore,"teams",s,"products",t,"software_testing","system_tests_history"),_=yield(0,i.x7)(d),_.exists()){let v=_.data();for(let g in v)console.log(v[g].systemTest.title),v[g].systemTest.title===e.title&&delete v[g];yield(0,i.BN)(d,v)}})()}}return(l=a).\u0275fac=function(s){return new(s||l)(h.KVO(i._7))},l.\u0275prov=h.jDH({token:l,factory:l.\u0275fac,providedIn:"root"}),a})()}}]);
\ No newline at end of file
diff --git a/www/common.e31a502fd31e94db.js b/www/common.e31a502fd31e94db.js
new file mode 100644
index 0000000..1baf81a
--- /dev/null
+++ b/www/common.e31a502fd31e94db.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkapp=self.webpackChunkapp||[]).push([[2076],{1263:(M,p,d)=>{d.d(p,{c:()=>m});var f=d(9672),r=d(1086),h=d(8607);const m=(c,a)=>{let i,s;const e=(o,l,_)=>{if(typeof document>"u")return;const g=document.elementFromPoint(o,l);g&&a(g)&&!g.disabled?g!==i&&(t(),n(g,_)):t()},n=(o,l)=>{i=o,s||(s=i);const _=i;(0,f.w)(()=>_.classList.add("ion-activated")),l()},t=(o=!1)=>{if(!i)return;const l=i;(0,f.w)(()=>l.classList.remove("ion-activated")),o&&s!==i&&i.click(),i=void 0};return(0,h.createGesture)({el:c,gestureName:"buttonActiveDrag",threshold:0,onStart:o=>e(o.currentX,o.currentY,r.a),onMove:o=>e(o.currentX,o.currentY,r.b),onEnd:()=>{t(!0),(0,r.h)(),s=void 0}})}},8438:(M,p,d)=>{d.d(p,{g:()=>r});var f=d(8476);const r=()=>{if(void 0!==f.w)return f.w.Capacitor}},5572:(M,p,d)=>{d.d(p,{c:()=>f,i:()=>r});const f=(h,m,c)=>"function"==typeof c?c(h,m):"string"==typeof c?h[c]===m[c]:Array.isArray(m)?m.includes(h):h===m,r=(h,m,c)=>void 0!==h&&(Array.isArray(h)?h.some(a=>f(a,m,c)):f(h,m,c))},3351:(M,p,d)=>{d.d(p,{g:()=>f});const f=(a,i,s,e,n)=>h(a[1],i[1],s[1],e[1],n).map(t=>r(a[0],i[0],s[0],e[0],t)),r=(a,i,s,e,n)=>n*(3*i*Math.pow(n-1,2)+n*(-3*s*n+3*s+e*n))-a*Math.pow(n-1,3),h=(a,i,s,e,n)=>c((e-=n)-3*(s-=n)+3*(i-=n)-(a-=n),3*s-6*i+3*a,3*i-3*a,a).filter(o=>o>=0&&o<=1),c=(a,i,s,e)=>{if(0===a)return((a,i,s)=>{const e=i*i-4*a*s;return e<0?[]:[(-i+Math.sqrt(e))/(2*a),(-i-Math.sqrt(e))/(2*a)]})(i,s,e);const n=(3*(s/=a)-(i/=a)*i)/3,t=(2*i*i*i-9*i*s+27*(e/=a))/27;if(0===n)return[Math.pow(-t,1/3)];if(0===t)return[Math.sqrt(-n),-Math.sqrt(-n)];const o=Math.pow(t/2,2)+Math.pow(n/3,3);if(0===o)return[Math.pow(t/2,.5)-i/3];if(o>0)return[Math.pow(-t/2+Math.sqrt(o),1/3)-Math.pow(t/2+Math.sqrt(o),1/3)-i/3];const l=Math.sqrt(Math.pow(-n/3,3)),_=Math.acos(-t/(2*Math.sqrt(Math.pow(-n/3,3)))),g=2*Math.pow(l,1/3);return[g*Math.cos(_/3)-i/3,g*Math.cos((_+2*Math.PI)/3)-i/3,g*Math.cos((_+4*Math.PI)/3)-i/3]}},5083:(M,p,d)=>{d.d(p,{i:()=>f});const f=r=>r&&""!==r.dir?"rtl"===r.dir.toLowerCase():"rtl"===(null==document?void 0:document.dir.toLowerCase())},3126:(M,p,d)=>{d.r(p),d.d(p,{startFocusVisible:()=>m});const f="ion-focused",h=["Tab","ArrowDown","Space","Escape"," ","Shift","Enter","ArrowLeft","ArrowRight","ArrowUp","Home","End"],m=c=>{let a=[],i=!0;const s=c?c.shadowRoot:document,e=c||document.body,n=v=>{a.forEach(u=>u.classList.remove(f)),v.forEach(u=>u.classList.add(f)),a=v},t=()=>{i=!1,n([])},o=v=>{i=h.includes(v.key),i||n([])},l=v=>{if(i&&void 0!==v.composedPath){const u=v.composedPath().filter(y=>!!y.classList&&y.classList.contains("ion-focusable"));n(u)}},_=()=>{s.activeElement===e&&n([])};return s.addEventListener("keydown",o),s.addEventListener("focusin",l),s.addEventListener("focusout",_),s.addEventListener("touchstart",t,{passive:!0}),s.addEventListener("mousedown",t),{destroy:()=>{s.removeEventListener("keydown",o),s.removeEventListener("focusin",l),s.removeEventListener("focusout",_),s.removeEventListener("touchstart",t),s.removeEventListener("mousedown",t)},setFocus:n}}},1086:(M,p,d)=>{d.d(p,{I:()=>r,a:()=>i,b:()=>s,c:()=>a,d:()=>n,h:()=>e});var f=d(8438),r=function(t){return t.Heavy="HEAVY",t.Medium="MEDIUM",t.Light="LIGHT",t}(r||{});const m={getEngine(){const t=(0,f.g)();if(null!=t&&t.isPluginAvailable("Haptics"))return t.Plugins.Haptics},available(){if(!this.getEngine())return!1;const o=(0,f.g)();return"web"!==(null==o?void 0:o.getPlatform())||typeof navigator<"u"&&void 0!==navigator.vibrate},impact(t){const o=this.getEngine();o&&o.impact({style:t.style})},notification(t){const o=this.getEngine();o&&o.notification({type:t.type})},selection(){this.impact({style:r.Light})},selectionStart(){const t=this.getEngine();t&&t.selectionStart()},selectionChanged(){const t=this.getEngine();t&&t.selectionChanged()},selectionEnd(){const t=this.getEngine();t&&t.selectionEnd()}},c=()=>m.available(),a=()=>{c()&&m.selection()},i=()=>{c()&&m.selectionStart()},s=()=>{c()&&m.selectionChanged()},e=()=>{c()&&m.selectionEnd()},n=t=>{c()&&m.impact(t)}},909:(M,p,d)=>{d.d(p,{I:()=>a,a:()=>n,b:()=>c,c:()=>l,d:()=>g,f:()=>t,g:()=>e,i:()=>s,p:()=>_,r:()=>v,s:()=>o});var f=d(467),r=d(4920),h=d(4929);const c="ion-content",a=".ion-content-scroll-host",i=`${c}, ${a}`,s=u=>"ION-CONTENT"===u.tagName,e=function(){var u=(0,f.A)(function*(y){return s(y)?(yield new Promise(D=>(0,r.c)(y,D)),y.getScrollElement()):y});return function(D){return u.apply(this,arguments)}}(),n=u=>u.querySelector(a)||u.querySelector(i),t=u=>u.closest(i),o=(u,y)=>s(u)?u.scrollToTop(y):Promise.resolve(u.scrollTo({top:0,left:0,behavior:y>0?"smooth":"auto"})),l=(u,y,D,O)=>s(u)?u.scrollByPoint(y,D,O):Promise.resolve(u.scrollBy({top:D,left:y,behavior:O>0?"smooth":"auto"})),_=u=>(0,h.b)(u,c),g=u=>{if(s(u)){const D=u.scrollY;return u.scrollY=!1,D}return u.style.setProperty("overflow","hidden"),!0},v=(u,y)=>{s(u)?u.scrollY=y:u.style.removeProperty("overflow")}},3992:(M,p,d)=>{d.d(p,{a:()=>f,b:()=>l,c:()=>i,d:()=>_,e:()=>A,f:()=>a,g:()=>g,h:()=>h,i:()=>r,j:()=>E,k:()=>P,l:()=>s,m:()=>t,n:()=>v,o:()=>n,p:()=>c,q:()=>m,r:()=>w,s:()=>T,t:()=>o,u:()=>D,v:()=>O,w:()=>e,x:()=>u,y:()=>y});const f="data:image/svg+xml;utf8,",r="data:image/svg+xml;utf8,",h="data:image/svg+xml;utf8,",m="data:image/svg+xml;utf8,",c="data:image/svg+xml;utf8,",a="data:image/svg+xml;utf8,",i="data:image/svg+xml;utf8,",s="data:image/svg+xml;utf8,",e="data:image/svg+xml;utf8,",n="data:image/svg+xml;utf8,",t="data:image/svg+xml;utf8,",o="data:image/svg+xml;utf8,",l="data:image/svg+xml;utf8,",_="data:image/svg+xml;utf8,",g="data:image/svg+xml;utf8,",v="data:image/svg+xml;utf8,",u="data:image/svg+xml;utf8,",y="data:image/svg+xml;utf8,",D="data:image/svg+xml;utf8,",O="data:image/svg+xml;utf8,",w="data:image/svg+xml;utf8,",E="data:image/svg+xml;utf8,",P="data:image/svg+xml;utf8,",T="data:image/svg+xml;utf8,",A="data:image/svg+xml;utf8,"},243:(M,p,d)=>{d.d(p,{c:()=>m,g:()=>c});var f=d(8476),r=d(4920),h=d(4929);const m=(i,s,e)=>{let n,t;if(void 0!==f.w&&"MutationObserver"in f.w){const g=Array.isArray(s)?s:[s];n=new MutationObserver(v=>{for(const u of v)for(const y of u.addedNodes)if(y.nodeType===Node.ELEMENT_NODE&&g.includes(y.slot))return e(),void(0,r.r)(()=>o(y))}),n.observe(i,{childList:!0,subtree:!0})}const o=g=>{var v;t&&(t.disconnect(),t=void 0),t=new MutationObserver(u=>{e();for(const y of u)for(const D of y.removedNodes)D.nodeType===Node.ELEMENT_NODE&&D.slot===s&&_()}),t.observe(null!==(v=g.parentElement)&&void 0!==v?v:g,{subtree:!0,childList:!0})},_=()=>{t&&(t.disconnect(),t=void 0)};return{destroy:()=>{n&&(n.disconnect(),n=void 0),_()}}},c=(i,s,e)=>{const n=null==i?0:i.toString().length,t=a(n,s);if(void 0===e)return t;try{return e(n,s)}catch(o){return(0,h.a)("Exception in provided `counterFormatter`.",o),t}},a=(i,s)=>`${i} / ${s}`},1622:(M,p,d)=>{d.r(p),d.d(p,{KEYBOARD_DID_CLOSE:()=>c,KEYBOARD_DID_OPEN:()=>m,copyVisualViewport:()=>w,keyboardDidClose:()=>u,keyboardDidOpen:()=>g,keyboardDidResize:()=>v,resetKeyboardAssist:()=>n,setKeyboardClose:()=>_,setKeyboardOpen:()=>l,startKeyboardAssist:()=>t,trackViewportChanges:()=>O});var f=d(4379);d(8438),d(8476);const m="ionKeyboardDidShow",c="ionKeyboardDidHide";let i={},s={},e=!1;const n=()=>{i={},s={},e=!1},t=E=>{if(f.K.getEngine())o(E);else{if(!E.visualViewport)return;s=w(E.visualViewport),E.visualViewport.onresize=()=>{O(E),g()||v(E)?l(E):u(E)&&_(E)}}},o=E=>{E.addEventListener("keyboardDidShow",P=>l(E,P)),E.addEventListener("keyboardDidHide",()=>_(E))},l=(E,P)=>{y(E,P),e=!0},_=E=>{D(E),e=!1},g=()=>!e&&i.width===s.width&&(i.height-s.height)*s.scale>150,v=E=>e&&!u(E),u=E=>e&&s.height===E.innerHeight,y=(E,P)=>{const A=new CustomEvent(m,{detail:{keyboardHeight:P?P.keyboardHeight:E.innerHeight-s.height}});E.dispatchEvent(A)},D=E=>{const P=new CustomEvent(c);E.dispatchEvent(P)},O=E=>{i=Object.assign({},s),s=w(E.visualViewport)},w=E=>({width:Math.round(E.width),height:Math.round(E.height),offsetTop:E.offsetTop,offsetLeft:E.offsetLeft,pageTop:E.pageTop,pageLeft:E.pageLeft,scale:E.scale})},4379:(M,p,d)=>{d.d(p,{K:()=>m,a:()=>h});var f=d(8438),r=function(c){return c.Unimplemented="UNIMPLEMENTED",c.Unavailable="UNAVAILABLE",c}(r||{}),h=function(c){return c.Body="body",c.Ionic="ionic",c.Native="native",c.None="none",c}(h||{});const m={getEngine(){const c=(0,f.g)();if(null!=c&&c.isPluginAvailable("Keyboard"))return c.Plugins.Keyboard},getResizeMode(){const c=this.getEngine();return null!=c&&c.getResizeMode?c.getResizeMode().catch(a=>{if(a.code!==r.Unimplemented)throw a}):Promise.resolve(void 0)}}},4731:(M,p,d)=>{d.d(p,{c:()=>a});var f=d(467),r=d(8476),h=d(4379);const m=i=>{if(void 0===r.d||i===h.a.None||void 0===i)return null;const s=r.d.querySelector("ion-app");return null!=s?s:r.d.body},c=i=>{const s=m(i);return null===s?0:s.clientHeight},a=function(){var i=(0,f.A)(function*(s){let e,n,t,o;const l=function(){var y=(0,f.A)(function*(){const D=yield h.K.getResizeMode(),O=void 0===D?void 0:D.mode;e=()=>{void 0===o&&(o=c(O)),t=!0,_(t,O)},n=()=>{t=!1,_(t,O)},null==r.w||r.w.addEventListener("keyboardWillShow",e),null==r.w||r.w.addEventListener("keyboardWillHide",n)});return function(){return y.apply(this,arguments)}}(),_=(y,D)=>{s&&s(y,g(D))},g=y=>{if(0===o||o===c(y))return;const D=m(y);return null!==D?new Promise(O=>{const E=new ResizeObserver(()=>{D.clientHeight===o&&(E.disconnect(),O())});E.observe(D)}):void 0};return yield l(),{init:l,destroy:()=>{null==r.w||r.w.removeEventListener("keyboardWillShow",e),null==r.w||r.w.removeEventListener("keyboardWillHide",n),e=n=void 0},isKeyboardVisible:()=>t}});return function(e){return i.apply(this,arguments)}}()},7838:(M,p,d)=>{d.d(p,{c:()=>r});var f=d(467);const r=()=>{let h;return{lock:function(){var c=(0,f.A)(function*(){const a=h;let i;return h=new Promise(s=>i=s),void 0!==a&&(yield a),i});return function(){return c.apply(this,arguments)}}()}}},9001:(M,p,d)=>{d.d(p,{c:()=>h});var f=d(8476),r=d(4920);const h=(m,c,a)=>{let i;const s=()=>!(void 0===c()||void 0!==m.label||null===a()),n=()=>{const o=c();if(void 0===o)return;if(!s())return void o.style.removeProperty("width");const l=a().scrollWidth;if(0===l&&null===o.offsetParent&&void 0!==f.w&&"IntersectionObserver"in f.w){if(void 0!==i)return;const _=i=new IntersectionObserver(g=>{1===g[0].intersectionRatio&&(n(),_.disconnect(),i=void 0)},{threshold:.01,root:m});_.observe(o)}else o.style.setProperty("width",.75*l+"px")};return{calculateNotchWidth:()=>{s()&&(0,r.r)(()=>{n()})},destroy:()=>{i&&(i.disconnect(),i=void 0)}}}},7895:(M,p,d)=>{d.d(p,{S:()=>r});const r={bubbles:{dur:1e3,circles:9,fn:(h,m,c)=>{const a=h*m/c-h+"ms",i=2*Math.PI*m/c;return{r:5,style:{top:32*Math.sin(i)+"%",left:32*Math.cos(i)+"%","animation-delay":a}}}},circles:{dur:1e3,circles:8,fn:(h,m,c)=>{const a=m/c,i=h*a-h+"ms",s=2*Math.PI*a;return{r:5,style:{top:32*Math.sin(s)+"%",left:32*Math.cos(s)+"%","animation-delay":i}}}},circular:{dur:1400,elmDuration:!0,circles:1,fn:()=>({r:20,cx:48,cy:48,fill:"none",viewBox:"24 24 48 48",transform:"translate(0,0)",style:{}})},crescent:{dur:750,circles:1,fn:()=>({r:26,style:{}})},dots:{dur:750,circles:3,fn:(h,m)=>({r:6,style:{left:32-32*m+"%","animation-delay":-110*m+"ms"}})},lines:{dur:1e3,lines:8,fn:(h,m,c)=>({y1:14,y2:26,style:{transform:`rotate(${360/c*m+(m({y1:12,y2:20,style:{transform:`rotate(${360/c*m+(m({y1:17,y2:29,style:{transform:`rotate(${30*m+(m<6?180:-180)}deg)`,"animation-delay":h*m/c-h+"ms"}})},"lines-sharp-small":{dur:1e3,lines:12,fn:(h,m,c)=>({y1:12,y2:20,style:{transform:`rotate(${30*m+(m<6?180:-180)}deg)`,"animation-delay":h*m/c-h+"ms"}})}}},7166:(M,p,d)=>{d.r(p),d.d(p,{createSwipeBackGesture:()=>c});var f=d(4920),r=d(5083),h=d(8607);d(1970);const c=(a,i,s,e,n)=>{const t=a.ownerDocument.defaultView;let o=(0,r.i)(a);const _=D=>o?-D.deltaX:D.deltaX;return(0,h.createGesture)({el:a,gestureName:"goback-swipe",gesturePriority:101,threshold:10,canStart:D=>(o=(0,r.i)(a),(D=>{const{startX:w}=D;return o?w>=t.innerWidth-50:w<=50})(D)&&i()),onStart:s,onMove:D=>{const w=_(D)/t.innerWidth;e(w)},onEnd:D=>{const O=_(D),w=t.innerWidth,E=O/w,P=(D=>o?-D.velocityX:D.velocityX)(D),A=P>=0&&(P>.2||O>w/2),L=(A?1-E:E)*w;let C=0;if(L>5){const R=L/Math.abs(P);C=Math.min(R,540)}n(A,E<=0?.01:(0,f.j)(0,E,.9999),C)}})}},2935:(M,p,d)=>{d.d(p,{w:()=>f});const f=(m,c,a)=>{if(typeof MutationObserver>"u")return;const i=new MutationObserver(s=>{a(r(s,c))});return i.observe(m,{childList:!0,subtree:!0}),i},r=(m,c)=>{let a;return m.forEach(i=>{for(let s=0;s{if(1!==m.nodeType)return;const a=m;return(a.tagName===c.toUpperCase()?[a]:Array.from(a.querySelectorAll(c))).find(s=>s.value===a.value)}},385:(M,p,d)=>{d.d(p,{l:()=>h});var f=d(4438),r=d(7863);let h=(()=>{var m;class c{constructor(){this.title="Header Title"}ngOnInit(){}}return(m=c).\u0275fac=function(i){return new(i||m)},m.\u0275cmp=f.VBU({type:m,selectors:[["app-header"]],inputs:{title:"title"},decls:5,vars:2,consts:[[3,"translucent"],["slot","start","menu","menu-id"]],template:function(i,s){1&i&&(f.j41(0,"ion-header",0)(1,"ion-toolbar"),f.nrm(2,"ion-menu-button",1),f.j41(3,"ion-title"),f.EFF(4),f.k0s()()()),2&i&&(f.Y8G("translucent",!0),f.R7$(4),f.JRh(s.title))},dependencies:[r.eU,r.MC,r.BC,r.ai]}),c})()},8453:(M,p,d)=>{d.d(p,{W:()=>h});var f=d(4438),r=d(7863);let h=(()=>{var m;class c{constructor(){this.title="Title"}ngOnInit(){}}return(m=c).\u0275fac=function(i){return new(i||m)},m.\u0275cmp=f.VBU({type:m,selectors:[["app-title"]],inputs:{title:"title"},decls:4,vars:1,consts:[[1,"lg:m-10"],["size","12","size-md","6","size-lg","6"],[1,"text-4xl","lg:text-6xl","font-bold"]],template:function(i,s){1&i&&(f.j41(0,"ion-row",0)(1,"ion-col",1)(2,"h1",2),f.EFF(3),f.k0s()()()),2&i&&(f.R7$(3),f.JRh(s.title))},dependencies:[r.hU,r.ln]}),c})()},4796:(M,p,d)=>{d.d(p,{u:()=>c});var f=d(467),r=d(8737),h=d(4262),m=d(4438);let c=(()=>{var a;class i{constructor(e,n){this.auth=e,this.firestore=n}registerUser(e){var n=this;return(0,f.A)(function*(){try{const t=yield(0,r.eJ)(n.auth,e.email,e.password);return t.user?(yield(0,h.BN)((0,h.H9)(n.firestore,"users",t.user.uid),{email:e.email,name:e.name,orgName:e.orgName,uid:t.user.uid}),yield(0,h.BN)((0,h.H9)(n.firestore,"teams",`${e.orgName}`),{name:e.orgName,members:[t.user.uid]}),t):null}catch{return null}})()}loginUser(e){var n=this;return(0,f.A)(function*(){try{var t;const o=yield(0,r.x9)(n.auth,e.email,e.password);if(null!==(t=o.user)&&void 0!==t&&t.uid){const l=yield(0,h.x7)((0,h.H9)(n.firestore,"users",o.user.uid));if(l.exists())return localStorage.setItem("user",JSON.stringify(l.data())),o}}catch(o){console.error(o)}return null})()}logoutUser(){var e=this;return(0,f.A)(function*(){yield e.auth.signOut()})()}addMember(e){var n=this;return(0,f.A)(function*(){try{const t=yield(0,r.eJ)(n.auth,e.email,e.password);if(!t.user)return!1;const o={email:e.email,name:e.name,orgName:e.orgName,uid:t.user.uid};return yield(0,h.BN)((0,h.H9)(n.firestore,"users",t.user.uid),o),o}catch{return!1}})()}}return(a=i).\u0275fac=function(e){return new(e||a)(m.KVO(r.Nj),m.KVO(h._7))},a.\u0275prov=m.jDH({token:a,factory:a.\u0275fac,providedIn:"root"}),i})()},6560:(M,p,d)=>{d.d(p,{x:()=>c});var f=d(467),r=d(4262),h=d(4438),m=d(1626);let c=(()=>{var a;class i{constructor(e,n){this.firestore=e,this.http=n,this.url_cpu="https://devprobeapi.onrender.com/flame_graph_date",this.url_mem="https://devprobeapi.onrender.com/flame_graph_memory_date"}getProducts(e){var n=this;return(0,f.A)(function*(){try{const t=(0,r.rJ)(n.firestore,"teams",e,"products");return(yield(0,r.GG)(t)).docs.map(l=>l.data())}catch(t){return console.log(t),[]}})()}getDates(e,n,t){var o=this;return(0,f.A)(function*(){try{t||(t="cpu_usage");const l=(0,r.rJ)(o.firestore,"teams",e,"products",n,t);return(yield(0,r.GG)(l)).docs.map(g=>g.id)}catch(l){return console.log(l),[]}})()}getFlameGraphByDate(e,n,t,o){var l=this;return(0,f.A)(function*(){try{let _={team:e,product:n,date:t};return o?yield l.http.post(l.url_mem,_).toPromise():yield l.http.post(l.url_cpu,_).toPromise()}catch{return{}}})()}}return(a=i).\u0275fac=function(e){return new(e||a)(h.KVO(r._7),h.KVO(m.Qq))},a.\u0275prov=h.jDH({token:a,factory:a.\u0275fac,providedIn:"root"}),i})()},201:(M,p,d)=>{d.d(p,{p:()=>c});var f=d(467),r=d(4262),h=d(4438),m=d(1626);let c=(()=>{var a;class i{constructor(e,n){this.firestore=e,this.httpClient=n,this.url="https://devprobeapi.onrender.com/"}syncRepo(e,n,t,o,l){var _=this;return(0,f.A)(function*(){const g=(0,r.H9)(_.firestore,"teams",e),v=yield(0,r.x7)(g);if(v.exists()){const u=v.data();u.gitHub={key:n,repo:t,branch:o,owner:l},yield(0,r.BN)(g,u)}})()}getSyncRepo(e){var n=this;return(0,f.A)(function*(){const t=(0,r.H9)(n.firestore,"teams",e),o=yield(0,r.x7)(t);return o.exists()?o.data().gitHub:null})()}getFiles(e){var n=this;return(0,f.A)(function*(){const t=yield n.httpClient.post(n.url+"github_repo",{auth:e.key,repo:e.repo,branch:e.branch,owner:e.owner}).toPromise();if(console.log(t),t){let o=t.paths;return o=o.filter(l=>!l.includes(".git")),o=o.filter(l=>!l.includes("node_modules")),o=o.filter(l=>!l.includes(".idea")),o=o.filter(l=>l.includes(".")),o}return[]})()}getContentFromFilePath(e,n){var t=this;return(0,f.A)(function*(){const o=yield t.httpClient.post(t.url+"github_file",{auth:e.key,repo:e.repo,owner:e.owner,path:n}).toPromise();return console.log(o),o?o.content:""})()}}return(a=i).\u0275fac=function(e){return new(e||a)(h.KVO(r._7),h.KVO(m.Qq))},a.\u0275prov=h.jDH({token:a,factory:a.\u0275fac,providedIn:"root"}),i})()},3661:(M,p,d)=>{d.d(p,{e:()=>c});var f=d(467),r=d(4438),h=d(4262),m=d(1626);let c=(()=>{var a;class i{constructor(e,n){this.firestore=e,this.http=n,this.ipApiURL="https://cors-ea3m.onrender.com/http://ip-api.com/json/"}getLocationDestSrc(e){var n=this;return(0,f.A)(function*(){var t,o,l,_,g,v,u,y;if(!e)return e;const D=n.http.get(n.ipApiURL+e.dst_addr).toPromise(),O=n.http.get(n.ipApiURL+e.src_addr).toPromise(),w=yield D,E=yield O;return e.dst_city=null!==(t=w.city)&&void 0!==t?t:"No city found",e.dst_country=null!==(o=w.country)&&void 0!==o?o:"No country found",e.dst_latitude=null!==(l=w.lat)&&void 0!==l?l:0,e.dst_longitude=null!==(_=w.lon)&&void 0!==_?_:0,e.src_city=null!==(g=E.city)&&void 0!==g?g:"No city found",e.src_country=null!==(v=E.country)&&void 0!==v?v:"No country found",e.src_latitude=null!==(u=E.lat)&&void 0!==u?u:0,e.src_longitude=null!==(y=E.lon)&&void 0!==y?y:0,e})()}getLocationFrom(e){var n=this;return(0,f.A)(function*(){if(!e)return e;let t=e.result;for(let v=0;v{d.d(p,{N:()=>c});var f=d(467),r=d(4262),h=d(4438),m=d(1626);let c=(()=>{var a;class i{constructor(e,n){this.firestore=e,this.http=n,this.ipApiURL="https://cors-ea3m.onrender.com/http://ip-api.com/json/"}getLocation(e){var n=this;return(0,f.A)(function*(){console.log(e);const o=yield n.http.get(n.ipApiURL+e[0].dst_addr).toPromise();for(let g=0;gn.http.get(n.ipApiURL+g.from).toPromise());return(yield Promise.all(l)).forEach((g,v)=>{e[v].fromLatitude=g.lat,e[v].fromLongitude=g.lon,e[v].cityFrom=g.city,e[v].countryFrom=g.country}),console.log(e),e})()}saveLocationResults(e,n,t,o){var l=this;return(0,f.A)(function*(){try{console.log(o,"ripeData");const _=(0,r.rJ)(l.firestore,"teams",e,"products",n,"ripe"),g=(0,r.H9)(_,t),v=o.map(u=>({from:u.from,dst_addr:u.dst_addr,latency:u.latency,cityFrom:u.cityFrom,countryFrom:u.countryFrom,cityTo:u.cityTo,countryTo:u.countryTo,fromLatitude:u.fromLatitude,fromLongitude:u.fromLongitude,toLatitude:u.toLatitude,toLongitude:u.toLongitude,id:u.id}));return yield(0,r.BN)(g,{data:v}),console.log("Data saved",{data:v}),!0}catch(_){return console.log(_),!1}})()}}return(a=i).\u0275fac=function(e){return new(e||a)(h.KVO(r._7),h.KVO(m.Qq))},a.\u0275prov=h.jDH({token:a,factory:a.\u0275fac,providedIn:"root"}),i})()},6241:(M,p,d)=>{d.d(p,{b:()=>m});var f=d(467),r=d(4262),h=d(4438);let m=(()=>{var c;class a{constructor(s){this.firestore=s}addProduct(s,e){var n=this;return(0,f.A)(function*(){try{console.log(s);const t=(0,r.H9)(n.firestore,"teams",e,"products",s.productObjective);return yield(0,r.BN)(t,s),!0}catch(t){return console.log(t),!1}})()}getProducts(s){var e=this;return(0,f.A)(function*(){try{const n=(0,r.rJ)(e.firestore,"teams",s,"products");return(yield(0,r.GG)(n)).docs.map(o=>o.data())}catch(n){return console.log(n),[]}})()}removeProduct(s,e){var n=this;return(0,f.A)(function*(){try{const t=(0,r.H9)(n.firestore,"teams",s,"products",e);return yield(0,r.kd)(t),!0}catch(t){return console.log(t),!1}})()}}return(c=a).\u0275fac=function(s){return new(s||c)(h.KVO(r._7))},c.\u0275prov=h.jDH({token:c,factory:c.\u0275fac,providedIn:"root"}),a})()},2588:(M,p,d)=>{d.d(p,{N:()=>c});var f=d(467),r=d(4262),h=d(4438),m=d(1626);let c=(()=>{var a;class i{constructor(e,n){this.http=e,this.firestore=n,this.measurementsUrl="https://cors-ea3m.onrender.com/https://atlas.ripe.net/api/v2/measurements/",this.measurementID=""}sendTraceRequest(e,n,t,o){var l=this;return(0,f.A)(function*(){console.log("Sending trace request");try{let _={definitions:[{target:e,description:n,type:t,af:4,is_oneoff:!0,protocol:"TCP"}],probes:[]};console.log(o);let g=o.split(",").length-1,v=(o=o.slice(0,-1)).split(","),u=[];for(let O=0;O({id:l.measurementID,dst_addr:u.dst_addr,dst_city:u.dst_city,dst_country:u.dst_country,dst_latitude:u.dst_latitude,dst_longitude:u.dst_longitude,src_addr:u.src_addr,src_city:u.src_city,src_country:u.src_country,src_latitude:u.src_latitude,src_longitude:u.src_longitude,result:u.result}));return yield(0,r.BN)(g,{data:v}),!0}catch(_){return console.log(_),!1}})()}getHistoryResults(e,n){var t=this;return(0,f.A)(function*(){const l=(0,r.rJ)(t.firestore,"teams/"+e+"/products/"+n+"/ripe_trace"),_=yield(0,r.GG)(l);let g=[];return _.docs.forEach(v=>{g.push({id:v.id,data:v.data()})}),console.log(g),g})()}getAllResultsByDescription(e,n,t){var o=this;return(0,f.A)(function*(){try{let l="teams/"+e+"/products/"+n+"/ripe_trace";console.log(l);let _=(0,r.H9)(o.firestore,l,t);return(yield(0,r.x7)(_)).data()}catch(l){return console.log(l),[]}})()}}return(a=i).\u0275fac=function(e){return new(e||a)(h.KVO(m.Qq),h.KVO(r._7))},a.\u0275prov=h.jDH({token:a,factory:a.\u0275fac,providedIn:"root"}),i})()},9640:(M,p,d)=>{d.d(p,{Q:()=>a});var f=d(467),r=d(1985),h=d(4262),m=d(4438),c=d(1626);let a=(()=>{var i;class s{constructor(n,t){this.http=n,this.firestore=t,this.measurementsUrl="https://cors-ea3m.onrender.com/https://atlas.ripe.net/api/v2/measurements/",this.measurementID=""}sendMeasurementRequest(n,t,o,l){var _=this;return(0,f.A)(function*(){let g=l.split(",").length-1;l=l.slice(0,-1);try{let v={definitions:[{target:n,description:"ping",type:"ping",af:4,is_oneoff:!0}],probes:[{requested:g,type:"probes",value:l}]},u={Authorization:"Key 92530695-134f-4cbc-b7c3-ec130f3719b0"};console.log(v);let y=yield _.http.post(_.measurementsUrl,v,{headers:u}).toPromise();return console.log(y),_.measurementID=y.measurements[0],_.measurementID}catch(v){return console.log(v),!1}})()}getMeasurementResults(n){var t=this;return(0,f.A)(function*(){n&&(t.measurementID=n);try{let o={Authorization:"Key 92530695-134f-4cbc-b7c3-ec130f3719b0"};return""===t.measurementID?(console.log("No measurement ID"),!1):t.http.get(t.measurementsUrl+t.measurementID+"/results/",{headers:o})}catch(o){return console.log(o),new r.c}})()}saveMeasurementResults(n,t,o,l){var _=this;return(0,f.A)(function*(){try{const g=(0,h.rJ)(_.firestore,"teams",n,"products",t,"ripe"),v=(0,h.H9)(g,o),u=l.map((y,D)=>({id:_.measurementID,from:y.from,dst_addr:y.dst_addr,latency:y.latency}));return yield(0,h.BN)(v,{data:u}),!0}catch(g){return console.log(g),!1}})()}getAllResultsByDescription(n,t,o){var l=this;return(0,f.A)(function*(){try{let _="teams/"+n+"/products/"+t+"/ripe";console.log(_);let g=(0,h.H9)(l.firestore,_,o);return(yield(0,h.x7)(g)).data()}catch(_){return console.log(_),[]}})()}getHistoryResults(n,t){var o=this;return(0,f.A)(function*(){const _=(0,h.rJ)(o.firestore,"teams/"+n+"/products/"+t+"/ripe"),g=yield(0,h.GG)(_);let v=[];return g.docs.forEach(u=>{v.push({id:u.id,data:u.data()})}),console.log(v),v})()}deleteHistory(n,t,o){var l=this;return(0,f.A)(function*(){const g=(0,h.H9)(l.firestore,"teams/"+n+"/products/"+t+"/ripe",o);try{return yield(0,h.kd)(g),!0}catch(v){return console.log(v),!1}})()}}return(i=s).\u0275fac=function(n){return new(n||i)(m.KVO(c.Qq),m.KVO(h._7))},i.\u0275prov=m.jDH({token:i,factory:i.\u0275fac,providedIn:"root"}),s})()},9274:(M,p,d)=>{d.d(p,{h:()=>m});var f=d(467),r=d(4262),h=d(4438);let m=(()=>{var c;class a{constructor(s){this.firestore=s}addSystemTest(s,e,n,t){var o=this;return(0,f.A)(function*(){const l=(0,r.H9)(o.firestore,"teams",s,"products",e,"software_testing","system_tests"),_=yield(0,r.x7)(l);if(_.exists()){const v=_.data()[n];console.log(v),v.push(t),yield(0,r.BN)(l,{[n]:v}),console.log("Document updated with ID: ",_.id)}else console.log("No such document!"),yield(0,r.BN)(l,{[n]:[t]}),console.log("Document created with ID: ",l.id)})()}getSystemTest(s,e,n){var t=this;return(0,f.A)(function*(){const o=(0,r.H9)(t.firestore,"teams",s,"products",e,"software_testing","system_tests"),l=yield(0,r.x7)(o);return l.exists()?l.data()[n]:[]})()}saveSystemTest(s,e,n,t){var o=this;return(0,f.A)(function*(){const l=(0,r.H9)(o.firestore,"teams",s,"products",e,"software_testing","system_tests_history"),_=new Date,g=`${_.getFullYear()}-${_.getMonth()+1}-${_.getDate()} ${_.getHours()}:${_.getMinutes()}:${_.getSeconds()}`;console.log(g);const v=yield(0,r.x7)(l);if(v.exists()){let u=v.data();u[g]={systemTest:t},u[g].productStep=n,yield(0,r.BN)(l,u)}else yield(0,r.BN)(l,{[g]:{systemTest:t,productStep:n}})})()}getSystemTestHistoryByStep(s,e,n){var t=this;return(0,f.A)(function*(){const o=(0,r.H9)(t.firestore,"teams",s,"products",e,"software_testing","system_tests_history"),l=yield(0,r.x7)(o);if(l.exists()){const _=l.data();return Object.keys(_).filter(v=>_[v].productStep===n).map(v=>_[v].systemTest)}return[]})()}getSystemTestHistoryByTitle(s,e,n,t){var o=this;return(0,f.A)(function*(){const l=(0,r.H9)(o.firestore,"teams",s,"products",e,"software_testing","system_tests_history"),_=yield(0,r.x7)(l);let g=[];if(_.exists()){const v=_.data();for(let u in v)v[u].systemTest.title===t&&v[u].productStep===n&&g.push({timestamp:u,systemTest:v[u].systemTest})}return g})()}getSystemTestByTimestamp(s,e,n,t,o){var l=this;return(0,f.A)(function*(){const _=(0,r.H9)(l.firestore,"teams",s,"products",e,"software_testing","system_tests_history"),g=yield(0,r.x7)(_);if(g.exists()){const v=g.data();for(let u in v)if(v[u].systemTest.title===t&&u===o&&v[u].productStep===n)return v[u].systemTest}return{}})()}deleteSystemTestHistoryByKey(s,e,n,t,o){var l=this;return(0,f.A)(function*(){const _=(0,r.H9)(l.firestore,"teams",s,"products",e,"software_testing","system_tests_history"),g=yield(0,r.x7)(_);if(g.exists()){const v=g.data();for(let u in v)v[u].systemTest.title===t&&u===o&&v[u].productStep===n&&delete v[u];yield(0,r.BN)(_,v)}})()}getSystemTestHistory(s,e){var n=this;return(0,f.A)(function*(){const t=(0,r.H9)(n.firestore,"teams",s,"products",e,"software_testing","system_tests_history"),o=yield(0,r.x7)(t);return o.exists()?o.data():{}})()}deleteSystemTest(s,e,n,t){var o=this;return(0,f.A)(function*(){let l=(0,r.H9)(o.firestore,"teams",s,"products",e,"software_testing","system_tests"),_=yield(0,r.x7)(l);if(_.exists()){let v=_.data()[n],u=v.indexOf(t);v.splice(u,1),yield(0,r.BN)(l,{[n]:v})}if(l=(0,r.H9)(o.firestore,"teams",s,"products",e,"software_testing","system_tests_history"),_=yield(0,r.x7)(l),_.exists()){let g=_.data();for(let v in g)console.log(g[v].systemTest.title),g[v].systemTest.title===t.title&&delete g[v];yield(0,r.BN)(l,g)}})()}}return(c=a).\u0275fac=function(s){return new(s||c)(h.KVO(r._7))},c.\u0275prov=h.jDH({token:c,factory:c.\u0275fac,providedIn:"root"}),a})()},2379:(M,p,d)=>{d.d(p,{I:()=>m});var f=d(467),r=d(4262),h=d(4438);let m=(()=>{var c;class a{constructor(s){this.firestore=s}addUnitTest(s,e,n,t){var o=this;return(0,f.A)(function*(){const l=(0,r.H9)(o.firestore,"teams",s,"products",e,"software_testing","unit_tests"),_=yield(0,r.x7)(l);if(_.exists()){const v=_.data()[n];console.log(v),v.push(t),yield(0,r.BN)(l,{[n]:v}),console.log("Document updated with ID: ",_.id)}else console.log("No such document!"),yield(0,r.BN)(l,{[n]:[t]}),console.log("Document created with ID: ",l.id)})()}getUnitTests(s,e,n){var t=this;return(0,f.A)(function*(){const o=(0,r.H9)(t.firestore,"teams",s,"products",e,"software_testing","unit_tests"),l=yield(0,r.x7)(o);return l.exists()?l.data()[n]:[]})()}}return(c=a).\u0275fac=function(s){return new(s||c)(h.KVO(r._7))},c.\u0275prov=h.jDH({token:c,factory:c.\u0275fac,providedIn:"root"}),a})()}}]);
\ No newline at end of file
diff --git a/www/index.html b/www/index.html
index 9d3ad0c..1d4a2be 100644
--- a/www/index.html
+++ b/www/index.html
@@ -21,6 +21,6 @@
-
+