@@ -19,7 +19,7 @@ declare global {
1919
2020let logMessages = ( window . __karma__ . config . args [ 0 ] === 'logMessages' ) ;
2121
22- describe ( 'powerbi ' , function ( ) {
22+ describe ( 'service ' , function ( ) {
2323 let powerbi : service . Service ;
2424 let $element : JQuery ;
2525
@@ -47,7 +47,7 @@ describe('powerbi', function () {
4747 // Arrange
4848 const elements = [
4949 '<div powerbi-embed-url="https://embedded.powerbi.com/appTokenReportEmbed?reportId=ABC123" powerbi-type="report"></div>' ,
50- '<div powerbi-embed-url="https://app .powerbi.com/embed?dashboardId=D1&tileId=T1 " powerbi-type="tile "></div>'
50+ '<div powerbi-embed-url="https://embedded .powerbi.com/appTokenReportEmbed?reportId=XYZ456 " powerbi-type="report "></div>' ,
5151 ] ;
5252
5353 elements . forEach ( element => {
@@ -156,6 +156,21 @@ describe('powerbi', function () {
156156 powerbi . accessToken = originalToken ;
157157 } ) ;
158158
159+ it ( 'if attempting to embed without specifying an id, throw error' , function ( ) {
160+ // Arrange
161+ const embedUrl = `https://embedded.powerbi.com/appTokenReportEmbed` ;
162+ const $reportContainer = $ ( `<div powerbi-embed-url="${ embedUrl } " powerbi-type="report"></div>` )
163+ . appendTo ( '#powerbi-fixture' ) ;
164+
165+ // Act
166+ const attemptToEmbed = ( ) => {
167+ powerbi . embed ( $reportContainer [ 0 ] ) ;
168+ } ;
169+
170+ // Assert
171+ expect ( attemptToEmbed ) . toThrowError ( ) ;
172+ } ) ;
173+
159174 it ( 'if component is already embedded in element re-use the existing component by calling load with the new information' , function ( ) {
160175 // Arrange
161176 const $element = $ ( '<div powerbi-embed-url="https://app.powerbi.com/reportEmbed?reportId=ABC123" powerbi-type="report"></div>' )
@@ -226,9 +241,7 @@ describe('powerbi', function () {
226241
227242 // Assert
228243 var report = powerbi . get ( $reportContainer [ 0 ] ) ;
229- // TODO: Find way to prevent using private method getAccessToken.
230- // Need to know what token the report used, but don't have another option?
231- var accessToken = ( < any > report ) . getAccessToken ( ) ;
244+ var accessToken = report . getConfig ( ) . accessToken ;
232245
233246 expect ( accessToken ) . toEqual ( testToken ) ;
234247
@@ -251,9 +264,76 @@ describe('powerbi', function () {
251264 expect ( iframe . length ) . toEqual ( 1 ) ;
252265 expect ( iframe . attr ( 'src' ) ) . toEqual ( embedUrl ) ;
253266 } ) ;
267+
268+ describe ( 'findIdFromEmbedUrl' , function ( ) {
269+ it ( 'should return value of reportId query parameter in embedUrl' , function ( ) {
270+ // Arrange
271+ const testReportId = "ABC123" ;
272+ const testEmbedUrl = `http://embedded.powerbi.com/appTokenReportEmbed?reportId=${ testReportId } ` ;
273+
274+ // Act
275+ const reportId = report . Report . findIdFromEmbedUrl ( testEmbedUrl ) ;
276+
277+ // Assert
278+ expect ( reportId ) . toEqual ( testReportId ) ;
279+ } ) ;
280+
281+ it ( 'should return undefinded if the query parameter is not in the url' , function ( ) {
282+ // Arrange
283+ const testEmbedUrl = `http://embedded.powerbi.com/appTokenReportEmbed` ;
284+
285+ // Act
286+ const reportId = report . Report . findIdFromEmbedUrl ( testEmbedUrl ) ;
287+
288+ // Assert
289+ expect ( reportId ) . toBeUndefined ( ) ;
290+ } ) ;
291+ } ) ;
292+
293+ it ( 'should get report id from configuration first' , function ( ) {
294+ // Arrange
295+ const testReportId = "ABC123" ;
296+ const embedUrl = `https://embedded.powerbi.com/appTokenReportEmbed?reportId=DIFFERENTID` ;
297+ const $reportContainer = $ ( `<div powerbi-embed-url="${ embedUrl } " powerbi-type="report"></div>` )
298+ . appendTo ( '#powerbi-fixture' ) ;
299+
300+ // Act
301+ const report = powerbi . embed ( $reportContainer [ 0 ] , { id : testReportId } ) ;
302+
303+ // Assert
304+ expect ( report . getConfig ( ) . id ) . toEqual ( testReportId ) ;
305+ } ) ;
306+
307+ it ( 'should fallback to using id from attribute if not supplied in embed/load configuration' , function ( ) {
308+ // Arrange
309+ const testReportId = "ABC123" ;
310+ const embedUrl = `https://embedded.powerbi.com/appTokenReportEmbed?reportId=DIFFERENTID` ;
311+ const $reportContainer = $ ( `<div powerbi-embed-url="${ embedUrl } " powerbi-type="report" powerbi-report-id="${ testReportId } "></div>` )
312+ . appendTo ( '#powerbi-fixture' ) ;
313+
314+ // Act
315+ const report = powerbi . embed ( $reportContainer [ 0 ] ) ;
316+
317+ // Assert
318+ expect ( report . getConfig ( ) . id ) . toEqual ( testReportId ) ;
319+ } ) ;
320+
321+ it ( 'should fallback to using id from embedUrl if not supplied in embed/load configuration or attribute' , function ( ) {
322+ // Arrange
323+ const testReportId = "ABC123" ;
324+ const embedUrl = `https://embedded.powerbi.com/appTokenReportEmbed?reportId=${ testReportId } ` ;
325+ const $reportContainer = $ ( `<div powerbi-embed-url="${ embedUrl } " powerbi-type="report" powerbi-report-id></div>` )
326+ . appendTo ( '#powerbi-fixture' ) ;
327+
328+ // Act
329+ const report = powerbi . embed ( $reportContainer [ 0 ] ) ;
330+
331+ // Assert
332+ expect ( report . getConfig ( ) . id ) . toEqual ( testReportId ) ;
333+ } ) ;
254334 } ) ;
255335
256- describe ( 'tiles' , function ( ) {
336+ xdescribe ( 'tiles' , function ( ) {
257337 it ( 'creates tile iframe from embedUrl' , function ( ) {
258338 // Arrange
259339 var embedUrl = 'https://app.powerbi.com/embed?dashboardId=D1&tileId=T1' ;
@@ -278,7 +358,7 @@ describe('powerbi', function () {
278358 powerbi . embed ( $element . get ( 0 ) , {
279359 type : 'report' ,
280360 embedUrl : 'fakeUrl' ,
281- id : undefined ,
361+ id : 'fakeId' ,
282362 accessToken : 'fakeToken'
283363 } ) ;
284364
@@ -296,7 +376,7 @@ describe('powerbi', function () {
296376 powerbi . embed ( $element . get ( 0 ) , {
297377 type : 'report' ,
298378 embedUrl : 'fakeUrl' ,
299- id : undefined ,
379+ id : 'fakeReportId' ,
300380 accessToken : 'fakeToken'
301381 } ) ;
302382
0 commit comments