14
14
* limitations under the License.
15
15
*/
16
16
17
- import { renderHook } from '@testing-library/react-hooks' ;
18
-
19
- import { useMediaCapabilities } from './' ;
17
+ import { renderHook , act } from '@testing-library/react-hooks' ;
20
18
21
19
const mediaConfig = {
22
20
type : 'file' ,
@@ -38,58 +36,84 @@ const mediaCapabilitiesMapper = {
38
36
39
37
describe ( 'useMediaCapabilities' , ( ) => {
40
38
test ( 'should return supported flag on unsupported platforms' , ( ) => {
41
- const { result } = renderHook ( ( ) => useMediaCapabilities ( mediaConfig ) ) ;
42
-
43
- expect ( result . current . mediaCapabilities ) . toEqual ( { hasMediaConfig : true , supported : false } ) ;
39
+ jest . isolateModules ( ( ) => {
40
+ const { useMediaCapabilities } = require ( './' ) ;
41
+ const { result } = renderHook ( ( ) => useMediaCapabilities ( mediaConfig ) ) ;
42
+
43
+ expect ( result . current . supported ) . toEqual ( false ) ;
44
+ } )
44
45
} ) ;
45
-
46
+
46
47
test ( 'should return supported and hasMediaConfig flags on unsupported platforms and no config given' , ( ) => {
47
- const { result } = renderHook ( ( ) => useMediaCapabilities ( ) ) ;
48
-
49
- expect ( result . current . mediaCapabilities ) . toEqual ( { hasMediaConfig : false , supported : false } ) ;
48
+ jest . isolateModules ( ( ) => {
49
+ const { useMediaCapabilities } = require ( './' ) ;
50
+ const { result } = renderHook ( ( ) => useMediaCapabilities ( ) ) ;
51
+
52
+ expect ( result . current . supported ) . toEqual ( false ) ;
53
+ } )
50
54
} ) ;
51
-
55
+
52
56
test ( 'should return initialMediaCapabilities for unsupported' , ( ) => {
53
- const initialMediaCapabilities = {
54
- supported : true ,
55
- smooth : false ,
56
- powerEfficient : true
57
- } ;
58
-
59
- const { result } = renderHook ( ( ) => useMediaCapabilities ( mediaConfig , initialMediaCapabilities ) ) ;
60
-
61
- expect ( result . current . mediaCapabilities . supported ) . toBe ( true ) ;
62
- expect ( result . current . mediaCapabilities . smooth ) . toEqual ( false ) ;
63
- expect ( result . current . mediaCapabilities . powerEfficient ) . toEqual ( true ) ;
57
+ jest . isolateModules ( ( ) => {
58
+ const initialMediaCapabilities = {
59
+ supported : true ,
60
+ smooth : false ,
61
+ powerEfficient : true
62
+ } ;
63
+
64
+ const { useMediaCapabilities } = require ( './' ) ;
65
+ const { result } = renderHook ( ( ) => useMediaCapabilities ( mediaConfig , initialMediaCapabilities ) ) ;
66
+
67
+ expect ( result . current . supported ) . toBe ( true ) ;
68
+ expect ( result . current . smooth ) . toEqual ( false ) ;
69
+ expect ( result . current . powerEfficient ) . toEqual ( true ) ;
70
+ } ) ;
64
71
} ) ;
65
-
72
+
66
73
test ( 'should return hasMediaConfig flag when no config given' , ( ) => {
67
- Object . defineProperty ( window . navigator , 'mediaCapabilities' , {
68
- value : true ,
69
- configurable : true ,
70
- writable : true
74
+ jest . isolateModules ( ( ) => {
75
+ global . navigator . mediaCapabilities = true
76
+
77
+ const { useMediaCapabilities } = require ( './' ) ;
78
+ const { result } = renderHook ( ( ) => useMediaCapabilities ( ) ) ;
79
+
80
+ expect ( result . current . supported ) . toEqual ( true ) ;
71
81
} ) ;
72
-
73
- const { result } = renderHook ( ( ) => useMediaCapabilities ( ) ) ;
74
-
75
- expect ( result . current . mediaCapabilities ) . toEqual ( { hasMediaConfig : false , supported : true } ) ;
76
82
} ) ;
77
83
78
84
test ( 'should return MediaDecodingConfiguration for given media configuration' , ( ) => {
79
- Object . defineProperty ( window . navigator , 'mediaCapabilities' , {
80
- value : {
81
- decodingInfo : ( mediaConfig ) => mediaCapabilitiesMapper [ mediaConfig . audio . contentType ]
82
- } ,
83
- configurable : true ,
84
- writable : true
85
- } ) ;
85
+ jest . isolateModules ( ( ) => {
86
+ global . navigator . mediaCapabilities = {
87
+ decodingInfo : ( mediaConfig ) => new Promise ( resolve => resolve ( mediaCapabilitiesMapper [ mediaConfig . audio . contentType ] ) )
88
+ } ;
89
+
90
+ const { useMediaCapabilities } = require ( './' ) ;
91
+ const { result , waitForNextUpdate } = renderHook ( ( ) => useMediaCapabilities ( mediaConfig ) ) ;
86
92
87
- const { result } = renderHook ( ( ) => useMediaCapabilities ( mediaConfig ) ) ;
88
-
89
- expect ( result . current . mediaCapabilities ) . toEqual ( {
90
- powerEfficient : true ,
91
- smooth : true ,
92
- supported : true
93
+ waitForNextUpdate ( ) . then ( ( ) => {
94
+ expect ( result . current . powerEfficient ) . toEqual ( true ) ;
95
+ expect ( result . current . smooth ) . toEqual ( true ) ;
96
+ expect ( result . current . supported ) . toEqual ( true ) ;
97
+ } ) ;
93
98
} ) ;
94
99
} ) ;
100
+
101
+ test ( 'should update the mediaCapabilities state' , ( ) => {
102
+ jest . isolateModules ( ( ) => {
103
+ const { useMediaCapabilities } = require ( './' ) ;
104
+ const { result } = renderHook ( ( ) => useMediaCapabilities ( ) ) ;
105
+
106
+ const mockMediaCapabilitiesStatus = {
107
+ powerEfficient : false ,
108
+ smooth : false ,
109
+ supported : false
110
+ } ;
111
+
112
+ act ( ( ) => result . current . updateMediaCapabilities ( mockMediaCapabilitiesStatus ) ) ;
113
+
114
+ expect ( result . current . powerEfficient ) . toEqual ( mockMediaCapabilitiesStatus . powerEfficient ) ;
115
+ expect ( result . current . smooth ) . toEqual ( mockMediaCapabilitiesStatus . smooth ) ;
116
+ expect ( result . current . supported ) . toEqual ( mockMediaCapabilitiesStatus . supported ) ;
117
+ } ) ;
118
+ } )
95
119
} ) ;
0 commit comments