@@ -2,61 +2,95 @@ import * as React from "react";
22import { render , screen } from "@testing-library/react" ;
33import { ModelKindDropdown } from "../ModelKindDropdown" ;
44import userEvent from "@testing-library/user-event" ;
5+ import { createMethod } from "../../../../test/factories/model-editor/method-factories" ;
6+ import { createModeledMethod } from "../../../../test/factories/model-editor/modeled-method-factories" ;
57
68describe ( ModelKindDropdown . name , ( ) => {
79 const onChange = jest . fn ( ) ;
10+ const method = createMethod ( ) ;
811
912 beforeEach ( ( ) => {
1013 onChange . mockReset ( ) ;
1114 } ) ;
1215
1316 it ( "allows changing the kind" , async ( ) => {
17+ const modeledMethod = createModeledMethod ( {
18+ type : "source" ,
19+ kind : "local" ,
20+ } ) ;
21+
1422 render (
1523 < ModelKindDropdown
16- kinds = { [ "local" , "remote" ] }
17- value = "local"
24+ method = { method }
25+ modeledMethod = { modeledMethod }
1826 onChange = { onChange }
1927 /> ,
2028 ) ;
2129
2230 expect ( screen . getByRole ( "combobox" ) ) . toHaveValue ( "local" ) ;
2331 await userEvent . selectOptions ( screen . getByRole ( "combobox" ) , "remote" ) ;
24- expect ( onChange ) . toHaveBeenCalledWith ( "remote" ) ;
32+ expect ( onChange ) . toHaveBeenCalledWith (
33+ method ,
34+ expect . objectContaining ( {
35+ kind : "remote" ,
36+ } ) ,
37+ ) ;
2538 } ) ;
2639
2740 it ( "resets the kind when changing the supported kinds" , ( ) => {
41+ const method = createMethod ( ) ;
42+ const modeledMethod = createModeledMethod ( {
43+ type : "source" ,
44+ kind : "local" ,
45+ } ) ;
46+
2847 const { rerender } = render (
2948 < ModelKindDropdown
30- kinds = { [ "local" , "remote" ] }
31- value = { "local" }
49+ method = { method }
50+ modeledMethod = { modeledMethod }
3251 onChange = { onChange }
3352 /> ,
3453 ) ;
3554
3655 expect ( screen . getByRole ( "combobox" ) ) . toHaveValue ( "local" ) ;
3756 expect ( onChange ) . not . toHaveBeenCalled ( ) ;
3857
58+ // Changing the type to sink should update the supported kinds
59+ const updatedModeledMethod = createModeledMethod ( {
60+ type : "sink" ,
61+ } ) ;
62+
3963 rerender (
4064 < ModelKindDropdown
41- kinds = { [ "sql-injection" , "log-injection" , "url-redirection" ] }
42- value = "local"
65+ method = { method }
66+ modeledMethod = { updatedModeledMethod }
4367 onChange = { onChange }
4468 /> ,
4569 ) ;
46- expect ( screen . getByRole ( "combobox" ) ) . toHaveValue ( "sql-injection" ) ;
47- expect ( onChange ) . toHaveBeenCalledWith ( "sql -injection") ;
70+
71+ expect ( screen . getByRole ( "combobox" ) ) . toHaveValue ( "code -injection") ;
4872 } ) ;
4973
5074 it ( "sets the kind when value is undefined" , ( ) => {
75+ const method = createMethod ( ) ;
76+ const modeledMethod = createModeledMethod ( {
77+ type : "source" ,
78+ } ) ;
79+
5180 render (
5281 < ModelKindDropdown
53- kinds = { [ "local" , "remote" ] }
54- value = { undefined }
82+ method = { method }
83+ modeledMethod = { modeledMethod }
5584 onChange = { onChange }
5685 /> ,
5786 ) ;
5887
5988 expect ( screen . getByRole ( "combobox" ) ) . toHaveValue ( "local" ) ;
60- expect ( onChange ) . toHaveBeenCalledWith ( "local" ) ;
89+ expect ( onChange ) . toHaveBeenCalledWith (
90+ method ,
91+ expect . objectContaining ( {
92+ kind : "local" ,
93+ } ) ,
94+ ) ;
6195 } ) ;
6296} ) ;
0 commit comments