示例#1
0
describe('UserService', () => {

	beforeEachProviders(() => [
		UserService,
		StorageService,
		SessionService,
		HttpService,
		BaseRequestOptions,
		MockBackend,
		provide(Http, {
			useFactory: (backend: MockBackend, defaultOptions: BaseRequestOptions) => {
				return new Http(backend, defaultOptions);
			},
			deps: [MockBackend, BaseRequestOptions]
		})
	]);

	// beforeEach(inject([MockBackend], (backend: MockBackend) => {
	// 	const baseResponse = new Response(new ResponseOptions({ body: { id: 1, email: '*****@*****.**', username: '******', password: '******' } }));
	// 	backend.connections.subscribe((c: MockConnection) => c.mockRespond(baseResponse));
	// }));

	it('should return token when authenticate worked',
		inject([UserService, MockBackend], (userService: UserService, backend: MockBackend) => {
			let token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJzZXJ2ZXIiLCJlbWFpbCI6ImFAYS5jb20iLCJwYXNzd29yZCI6ImFAYS5jb20iLCJpYXQiOjE0NTk0NDc4ODAsImV4cCI6MTQ1OTUzNDI4MH0.b260_KHB1FBBNlu2avblbi9VzqSER9hnzzCzdf6cGA4';
			let baseResponse = new Response(new ResponseOptions({ body: { success: true, message: 'Enjoy your token!', token: token } }));
			backend.connections.subscribe((c: MockConnection) => c.mockRespond(baseResponse));
			User.setNextId(0);
			userService.authenticate('*****@*****.**', '*****@*****.**', false).subscribe((res: any) => {
				expect(res.token).toBe(token);
			});
		})
	);

	it('should return user when authenticate worked',
		inject([UserService, MockBackend], (userService: UserService, backend: MockBackend) => {
			let token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJzZXJ2ZXIiLCJlbWFpbCI6ImFAYS5jb20iLCJwYXNzd29yZCI6ImFAYS5jb20iLCJpYXQiOjE0NTk0NDc4ODAsImV4cCI6MTQ1OTUzNDI4MH0.b260_KHB1FBBNlu2avblbi9VzqSER9hnzzCzdf6cGA4';
			let baseResponse = new Response(new ResponseOptions({ body: { success: true, message: 'Enjoy your token!', token: token } }));
			backend.connections.subscribe((c: MockConnection) => c.mockRespond(baseResponse));
			User.setNextId(0);
			userService.authenticate('*****@*****.**', '*****@*****.**', false).subscribe((res: any) => {
				expect(res.user.id).toBe(1);
				expect(res.user.username).toBe('server');
				expect(res.user.email).toBe('*****@*****.**');
			});
		})
	);

	it('should return a user without password when authenticate worked',
		inject([UserService, MockBackend], (userService: UserService, backend: MockBackend) => {
			let token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJzZXJ2ZXIiLCJlbWFpbCI6ImFAYS5jb20iLCJwYXNzd29yZCI6ImFAYS5jb20iLCJpYXQiOjE0NTk0NDc4ODAsImV4cCI6MTQ1OTUzNDI4MH0.b260_KHB1FBBNlu2avblbi9VzqSER9hnzzCzdf6cGA4';
			let baseResponse = new Response(new ResponseOptions({ body: { success: true, message: 'Enjoy your token!', token: token } }));
			backend.connections.subscribe((c: MockConnection) => c.mockRespond(baseResponse));
			User.setNextId(0);
			userService.authenticate('*****@*****.**', '*****@*****.**', false).subscribe((res: any) => {
				console.log('HERE', res);
				expect(res.user.password).toBe(undefined);
			});
		})
	);


});
describe('Blog Service', () => {

  // All heed this block - it is required so that the test injector
  // is properly set up. Without doing this, you won't get the
  // fake backend injected into Http.

  // Also, you need to inject MockBackend as a provider before you wire
  // it to replace XHRBackend with the provide function!  So this is all
  // extremely important to set up right.
  beforeEachProviders(() => {
    return [
      HTTP_PROVIDERS,
      provide(XHRBackend, {useClass: MockBackend}),
      BlogService
    ];
  });


  it('should get blogs', inject([XHRBackend, BlogService], (mockBackend, blogService) => {
    mockBackend.connections.subscribe(
      (connection: MockConnection) => {
        connection.mockRespond(new Response(
          new ResponseOptions({
              body: [
                {
                  id: 26,
                  contentRendered: "<p><b>Hi there</b></p>",
                  contentMarkdown: "*Hi there*"
                }]
            }
          )));
      });

    blogService.getBlogs().subscribe((blogs: BlogEntry[]) => {
      expect(blogs.length).toBe(1);
      expect(blogs[0].id).toBe(26);
    });

  }));



  it('should get blogs async', injectAsync([XHRBackend, BlogService], (mockBackend, blogService) => {
    return new Promise((pass, fail) => {
      mockBackend.connections.subscribe(
        (connection: MockConnection) => {
          connection.mockRespond(new Response(
            new ResponseOptions({
                body: [
                  {
                    id: 26,
                    contentRendered: "<p><b>Hi there</b></p>",
                    contentMarkdown: "*Hi there*"
                  }]
              }
            )));
        });

      blogService.getBlogs().subscribe(
        (data) => {
          expect(data.length).toBe(1);
          expect(data[0].id).toBe(26);
          expect(data[0].contentMarkdown).toBe('*Hi there*');
        });
    });
  }), 3000);

  it('should save updates to an existing blog entry',
    injectAsync([XHRBackend, BlogService], (mockBackend, blogService) => {
    return new Promise((resolve, reject) => {
      mockBackend.connections.subscribe(connection => {
        connection.mockRespond(new ResponseOptions({status: 200}));
      });

      let data: BlogEntry = new BlogEntry("Blog Entry", "<p><b>Hi</b></p>", "*Hi*", 10);
      blogService.saveBlog(data).subscribe(
        (successResult) => {
          expect(successResult).toBeDefined(  );
          expect(successResult.status).toBe(200);
        });
    });
  }), 300);
});
describe('DemoFormWithEvents', () => {
  var _console;
  var fakeConsole;
  var el, input, form;

  beforeEach(() => {
    // declare a fake console to track all the logs
    fakeConsole = {};
    fakeConsole._logs = [];
    fakeConsole.log = (...theArgs) => fakeConsole._logs.push(theArgs.join(' '));

    // replace the real console with our fake version
    _console = window.console;
    window.console = fakeConsole;
  });

  // restores the real console
  afterAll(() => window.console = _console);

  beforeEachProviders(() => {
    return [FormBuilder];
  });

  function createComponent(tcb: TestComponentBuilder): Promise<ComponentFixture> {
    return tcb.createAsync(DemoFormWithEvents).then((fixture) => {
      el = fixture.debugElement.nativeElement;
      input = fixture.debugElement.query(By.css("input")).nativeElement;
      form = fixture.debugElement.query(By.css("form")).nativeElement;
      fixture.detectChanges();

      return fixture;
    });
  }

  it('displays errors with no sku', injectAsync([TestComponentBuilder], (tcb) => {
    return createComponent(tcb).then((fixture) => {
      input.value = '';
      dispatchEvent(input, 'input');
      fixture.detectChanges();

      // no value on sku field, all error messages are displayed
      let msgs = el.querySelectorAll('.ui.error.message');
      expect(msgs[0]).toHaveText('SKU is invalid');
      expect(msgs[1]).toHaveText('SKU is required');
    });
  }));

  it('displays no errors when sku has a value', injectAsync([TestComponentBuilder], (tcb) => {
    return createComponent(tcb).then((fixture) => {
      input.value = 'XYZ';
      dispatchEvent(input, 'input');
      fixture.detectChanges();

      let msgs = el.querySelectorAll('.ui.error.message');
      expect(msgs.length).toEqual(0);
    });
  }));

  it('handles sku value changes', inject([TestComponentBuilder],
    fakeAsync((tcb) => {
      createComponent(tcb).then((fixture) => {
        input.value = 'XYZ';
        dispatchEvent(input, 'input');
        tick();

        expect(fakeConsole._logs).toContain('sku changed to: XYZ');
      });
    })
  ));

  it('handles form changes', inject([TestComponentBuilder],
    fakeAsync((tcb) => {
      createComponent(tcb).then((fixture) => {
        input.value = 'XYZ';
        dispatchEvent(input, 'input');
        tick();

        expect(fakeConsole._logs).toContain('form changed to: [object Object]');
      });
    })
  ));

  it('handles form submission', inject([TestComponentBuilder],
    fakeAsync((tcb) => {
      createComponent(tcb).then((fixture) => {
        input.value = 'ABC';
        dispatchEvent(input, 'input');
        tick();

        fixture.detectChanges();
        dispatchEvent(form, 'submit');
        tick();

        expect(fakeConsole._logs).toContain('you submitted value: ABC');
      });
    })
  ));

});
示例#4
0
import { describe, it, expect, beforeEachProviders, inject } from 'angular2/testing'
import { ChatApp } from '../app/chatapp'

beforeEachProviders(() => [ChatApp]);

describe('ChatApp: Chatapp', () => {

});
示例#5
0
import {describe, it, expect, beforeEachProviders, inject} from 'angular2/testing';
import {AppComponent} from './app.ts';

beforeEachProviders(() => [AppComponent]);

describe('Houston App', () => {

  it('should initiate the data service upon bootstrap',
     inject([AppComponent], (app: AppComponent) => {
       expect(app['_dataService'].developers$).toBeDefined();
     }));

});
describe('MarkPipes Pipe', () => {

  beforeEachProviders(() => [MarkPipe]);


});
describe('RestService', () => {

	beforeEachProviders(() => [
		HTTP_PROVIDERS,
		provide(XHRBackend, { useClass: MockBackend }),
		RestService
	]);

	describe('Travel', () => {
		it('get()', inject([RestService, XHRBackend], (rest: RestService, mockBackend: MockBackend) => {
			mockBackend.connections.subscribe(c => {
				if (c.request.url === `${BASE_API_URL}/api/explore/partyTypes` && c.request.method === 0) {
					let res = new Response(
						new ResponseOptions(
							{
								body: {
									"results": [{
										"category_id": "123",
										"question_id": "123",
										"image_url": "http://test",
										"description": "I am a banana",
										"goodFor": "Me",
										"suggestions": "Good for you",
										"self": "http://another-link",
										"text": "This is all me"
									}]
								},
								status: 200
							}
						)
					);
					c.mockRespond(res);
				}
			})

			rest.traveling.get((err, response: Array<Travel>) => {
				expect(response.length).toBe(1);
				expect(response[0].category_id).toBeDefined();
				expect(response[0].category_id).toBe("123");
			});
		}));
	});

	describe('Questions', () => {
		var rest: RestService;
		var mockBackend: MockBackend;

		let before = (_rest, _mockBackend, cb) => {
			rest = _rest;
			mockBackend = _mockBackend;

			mockBackend.connections.subscribe(c => {
				let testPayload = {
					"category_id": "123",
					"question_id": "234",
					"image_url": "test234",
					"description": "this is a test",
					"goodFor": "everyone",
					"suggestions": "awesome stuff",
					"self": "http://test",
					"text": "this is some text"
				};

				if (c.request.url === `${BASE_API_URL}/api/explore/categories/123/questions` && c.request.method === 0) {
					send200({
						"results": [
							testPayload
						]
					}, c);
					return;
				}

				testPayload.question_id = "345";

				if (c.request.url === `${BASE_API_URL}/api/explore/questions/345` && c.request.method === 0) {
					send200({
						"results": [
							testPayload
						]
					}, c);
					return;
				}
			});

			cb();
		}

		it('get()', beforeHack(before, () => {
			rest.questions.get(123, (err, questions: Array<Question>) => {
				expect(questions.length).toBe(1);
				expect(questions[0].question_id).toBe("234");
			});
		}));

		it('getById()', beforeHack(before, () => {
			rest.questions.get(345, (err, question: Question) => {
				expect(question.question_id).toBe("345");
			});
		}));
	});

	describe('Categories', () => {
		var rest: RestService;
		var mockBackend: MockBackend;

		let before = (_rest, _mockBackend, cb) => {
			rest = _rest;
			mockBackend = _mockBackend;

			mockBackend.connections.subscribe(c => {
				let questionPayload1 = {
					"category_id": "234",
					"question_id": "345",
					"image_url": "test234",
					"description": "this is a test",
					"goodFor": "everyone",
					"suggestions": "awesome stuff",
					"self": "http://test",
					"text": "this is some text"
				};

				let questionPayload0 = {
					"category_id": "123",
					"question_id": "234",
					"image_url": "test234",
					"description": "this is a test",
					"goodFor": "everyone",
					"suggestions": "awesome stuff",
					"self": "http://test",
					"text": "this is some text"
				};

				let categoryPayload0 = {
					"category_id": "123",
					"title": "test_category",
					"image": "http://test.img"
				};

				let categoryPayload1 = {
					"category_id": "234",
					"title": "test_category",
					"image": "http://test.img"
				};

				if (c.request.url === `${BASE_API_URL}/api/explore/categories/123/questions` && c.request.method === 0) {
					send200({
						"results": [
							questionPayload0
						]
					}, c);
					return;
				}

				if (c.request.url === `${BASE_API_URL}/api/explore/categories/234/questions` && c.request.method === 0) {
					send200({
						"results": [
							questionPayload1
						]
					}, c);
					return;
				}

				if (c.request.url === `${BASE_API_URL}/api/explore/categories` && c.request.method === 0) {
					send200({
						"results": [
							categoryPayload0,
							categoryPayload1
						]
					}, c);
					return;
				}
			});

			cb();
		}

		it('get()', beforeHack(before, () => {
			rest.categories.get((err, categories: Array<Category>) => {
				expect(categories.length).toBe(2);
				expect(categories[0].title).toBe("test_category");
				expect(categories[0].questions.length).toBe(1);
				expect(categories[0].questions[0].description).toBe("this is a test");
			});
		}));

		it('getNextId()', beforeHack(before, () => {
			rest.categories.get((err, categories: Array<Category>) => {
				expect(categories.length).toBe(2);
				expect(categories[0].title).toBe("test_category");
				expect(categories[0].questions.length).toBe(1);
				expect(categories[0].questions[0].description).toBe("this is a test");

				// get category_id
				let category = rest.categories.getNextId(123);
				expect(category.category_id).toBe(234);
				expect(category.questions.length).toBe(1);
				expect(category.questions[0].question_id).toBe(345);
			});
		}));

		it('getById() -- cached', beforeHack(before, () => {
			rest.categories.get(() => {
				rest.categories.getById(123, (err, category) => {
					expect(category.length).toBe(1);
					expect(category.title).toBe("test_category");
					expect(category.questions.length).toBe(1);
					expect(category.questions[0].description).toBe("this is a test");
				});
			});
		}));

		it('getById() -- not cached', beforeHack(before, () => {
			rest.categories.getById(123, (err, category) => {
				expect(category.length).toBe(1);
				expect(category.title).toBe("test_category");
				expect(category.questions.length).toBe(1);
				expect(category.questions[0].description).toBe("this is a test");
			});
		}));

		// Not needed, tested through use of the other methods
		it('fetchQuestionSummary()', beforeHack(before, () => {

		}));
	});

	describe("Survey", () => {
		let category: Category = null;
		let survey: Survey = null;
		let question: Question = null;

		beforeEach(() => {
			ls.clear();
			question = new Question(
				123,
				123,
				"http://test.img",
				"test desc",
				"everyone",
				"test sugess",
				"self test",
				"text test"
			);
			survey = new Survey();
			category = new Category(123, "test", "http://test.img");
			category.questions = [question];
		});

		it('store()', () => {
			// Tested by other methods, no tests necessary
		});

		it('like(category: Category, question: Question)', () => {
			survey.dislike(category, question);
			expect(ls('_disliked').length).toBe(1);
			expect(ls('_disliked')[0]).toBe(123);
			expect(survey.disliked.size).toBe(1);
			expect(survey.disliked.has(123)).toBeTruthy();

			survey.like(category, question);
			expect(ls('_liked').length).toBe(1);
			expect(ls('_liked')[0]).toBe(123);
			expect(survey.liked.size).toBe(1);
			expect(survey.liked.has(123)).toBeTruthy();

			expect(ls('_disliked').length).toBe(0);
			expect(survey.disliked.size).toBe(0);

			expect(category.progress).toBe(100);
		});

		it('likq_q(question: Question)', () => {
			survey.dislike(category, question);
			expect(ls('_disliked').length).toBe(1);
			expect(ls('_disliked')[0]).toBe(123);
			expect(survey.disliked.size).toBe(1);
			expect(survey.disliked.has(123)).toBeTruthy();

			survey.like_q(question);
			expect(ls('_liked').length).toBe(1);
			expect(ls('_liked')[0]).toBe(123);
			expect(survey.liked.size).toBe(1);
			expect(survey.liked.has(123)).toBeTruthy();

			expect(ls('_disliked').length).toBe(0);
			expect(survey.disliked.size).toBe(0);
		});

		it('toggle_like(question_id: number)', () => {
			survey.like(category, question);
			expect(ls('_liked').length).toBe(1);
			expect(ls('_liked')[0]).toBe(123);
			expect(survey.liked.size).toBe(1);
			expect(survey.liked.has(123)).toBeTruthy();

			survey.toggle_like(question.question_id);
			expect(ls('_liked').length).toBe(0);
			expect(survey.liked.size).toBe(0);
		});

		it('dislike(category: Category, question: Question)', () => {
			survey.like(category, question);
			expect(ls('_liked').length).toBe(1);
			expect(ls('_liked')[0]).toBe(123);
			expect(survey.liked.size).toBe(1);
			expect(survey.liked.has(123)).toBeTruthy();

			survey.dislike(category, question);
			expect(ls('_disliked').length).toBe(1);
			expect(ls('_disliked')[0]).toBe(123);
			expect(survey.disliked.size).toBe(1);
			expect(survey.disliked.has(123)).toBeTruthy();

			expect(ls('_liked').length).toBe(0);
			expect(survey.liked.size).toBe(0);

			expect(category.progress).toBe(100);
		});

		it('maybe(category: Category, question: Question)', () => {
			survey.like(category, question);
			expect(ls('_liked').length).toBe(1);
			expect(ls('_liked')[0]).toBe(123);
			expect(survey.liked.size).toBe(1);
			expect(survey.liked.has(123)).toBeTruthy();

			survey.maybe(category, question);
			expect(ls('_neutral').length).toBe(1);
			expect(ls('_neutral')[0]).toBe(123);
			expect(survey.neutral.size).toBe(1);
			expect(survey.neutral.has(123)).toBeTruthy();

			expect(ls('_liked').length).toBe(0);
			expect(survey.liked.size).toBe(0);

			expect(category.progress).toBe(100);
		});

		it('answer(question_id: number)', () => {
			expect(survey.answer(question.question_id)).toBe(-1);
			survey.like(category, question);
			expect(survey.answer(question.question_id)).toBe(2);
			survey.dislike(category, question);
			expect(survey.answer(question.question_id)).toBe(0);
			survey.maybe(category, question);
			expect(survey.answer(question.question_id)).toBe(1);
		});
	});

	describe('Recommendations', () => {
		var rest: RestService;
		var mockBackend: MockBackend;
		var recommendation_fixtures: Array<Recommendation>;
		var category: Category;
		var questions: Array<Question>;

		beforeEach(() => {
			console.log('is this working? 0');
			recommendation_fixtures = new Array<Recommendation>();
			// Fill this with random shit
			for (let i = 0; i < recommendation_fixtures.length; i++) {
				recommendation_fixtures[i] = new Recommendation(
					faker.Lorem.words(),
					faker.Lorem.words(),
					faker.Lorem.words(),
					faker.Lorem.words(),
					faker.Lorem.words(),
					faker.Lorem.words(),
					faker.Lorem.words(),
					faker.Lorem.words(),
					faker.Lorem.words(),
					faker.Lorem.words(),
					faker.Lorem.words()
				)
			}
		});

		let before = (_rest, _mockBackend, cb) => {
			rest = _rest;
			mockBackend = _mockBackend;
			category = new Category(123, "test", "http://test.img");
			questions = new Array<Question>();
			for (let i = 0; i < 3; i ++) {
				questions.push(
					new Question(
						123,
						i,
						"faker.Lorem.words()",
						"faker.Lorem.words()",
						"faker.Lorem.words()",
						"faker.Lorem.words()",
						"faker.Lorem.words()",
						"faker.Lorem.words()"
					)
				);
			}

			ls.clear();
			
			rest.survey.like(category, questions[0]);
			rest.survey.dislike(category, questions[1]);
			rest.survey.maybe(category, questions[2]);

			mockBackend.connections.subscribe(c => {
				let match = c.request.url.match(/size=(\d+)/);
				console.log(match);
				if (match === null) throw new Error('Did not find parameter: size');
				let size = match[1];
				console.log('-----');
				match = c.request.url.match(/start=(\d+)/);
				console.log(match);
				if (match === null) throw new Error('Did not find parameter: start');
				let start = match[1];
				console.log('-----');

				console.log(`${BASE_API_URL}/api/explore/cruises?questions_liked=0&questions_disliked=1&questions_neutral=2&start=${start}&size=${size}`);
				console.log(c.request.url);
				// Handle all of our requests
				if (c.request.url === `${BASE_API_URL}/api/explore/cruises?questions_liked=123&questions_disliked=234&questions_neutral=345&start=${start}&size=${size}` && c.request.method === 0) {
					send200({
						"results": recommendation_fixtures.slice(start, size)
					}, c);
					return;
				}
			});
			cb();
		};

		it('querySet()', beforeHack(before, () => {
			// This gets tested through our other methods
		}));

		it('initializeRecommendations()', beforeHack(before, () => {
			console.log('is this working? 3');
			// We expect to get only the first 10 paginated recommendations
			rest.recommendations.initializeRecommendations((err, recommendations: Array<Recommendation>) => {
				console.log('//////');
				console.log(recommendations.length);
				console.log('//////');
				expect(recommendations.length).toBe(11);
				
			});
		}));

		it('paginate()', beforeHack(before, () => {

		}));

		it('get()', beforeHack(before, () => {

		}));

		it('getDetail()', beforeHack(before, () => {

		}));
	});

	describe('Favorites', () => {
		var rest: RestService;
		var mockBackend: MockBackend;

		let before = (_rest, _mockBackend, cb) => {
			rest = _rest;
			mockBackend = _mockBackend;
			mockBackend.connections.subscribe(c => {

			});
		};

		it('get()', beforeHack(before, () => {

		}));

		it('getSummaries()', beforeHack(before, () => {

		}));

		it('has()', beforeHack(before, () => {

		}));

		it('cache()', beforeHack(before, () => {

		}));

		it('add()', beforeHack(before, () => {

		}));

		it('delete()', beforeHack(before, () => {

		}));

		it('emailFavorites()', beforeHack(before, () => {

		}));

		it('save()', beforeHack(before, () => {

		}));
	});
});
import {describe, it, expect, beforeEachProviders, inject} from 'angular2/testing';
import {GestaoLivreApp} from '../app/gestaolivre';

beforeEachProviders(() => [GestaoLivreApp]);

/*
describe('App: Gestaolivre', () => {
  it('should have the `defaultMeaning` as 42', inject([GestaoLivreApp], (app: GestaoLivreApp) => {
    expect(app.defaultMeaning).toBe(42);
  }));

  describe('#meaningOfLife', () => {
    it('should get the meaning of life', inject([GestaoLivreApp], (app: GestaoLivreApp) => {
      expect(app.meaningOfLife()).toBe('The meaning of life is 42');
      expect(app.meaningOfLife(22)).toBe('The meaning of life is 22');
    }));
  });
});
*/
示例#9
0
import {describe, it, expect, beforeEachProviders, inject} from 'angular2/testing';
import {MainApp} from '../app/main';

beforeEachProviders(() => [MainApp]);
示例#10
0
import {describe, it, expect, beforeEachProviders, inject} from 'angular2/testing';
import {TourApp} from '../app/tour';

beforeEachProviders(() => [TourApp]);

describe('App: Tour', () => {
  it('should have the `defaultMeaning` as 42', inject([TourApp], (app) => {
    expect(app.defaultMeaning).toBe(42);
  }));

  describe('#meaningOfLife', () => {
    it('should get the meaning of life', inject([TourApp], (app) => {
      expect(app.meaningOfLife()).toBe('The meaning of life is 42');
      expect(app.meaningOfLife(22)).toBe('The meaning of life is 22');
    }));
  });
});