jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/373057 )

Change subject: Refactor LemmaWidget.spec.js
......................................................................


Refactor LemmaWidget.spec.js

Change-Id: I33e13d57e9ae5e2205fcce36c360b3e5e15ee757
---
M package.json
M tests/jasmine/LemmaWidget.spec.js
2 files changed, 45 insertions(+), 50 deletions(-)

Approvals:
  WMDE-leszek: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/package.json b/package.json
index b5fed2d..ea60458 100644
--- a/package.json
+++ b/package.json
@@ -17,6 +17,7 @@
     "sinon": "^3.2.1",
     "unexpected": "^10.32.1",
     "unexpected-dom": "^4.0.0",
+    "unexpected-sinon": "^10.8.2",
     "vue": "2.3.3",
     "vuex": "^2.3.1"
   },
diff --git a/tests/jasmine/LemmaWidget.spec.js 
b/tests/jasmine/LemmaWidget.spec.js
index 044e3d8..c194dbf 100644
--- a/tests/jasmine/LemmaWidget.spec.js
+++ b/tests/jasmine/LemmaWidget.spec.js
@@ -5,6 +5,7 @@
        var sinon = require( 'sinon' );
        var expect = require( 'unexpected' ).clone();
        expect.installPlugin( require( 'unexpected-dom' ) );
+       expect.installPlugin( require( 'unexpected-sinon' ) );
 
        var Vue = global.Vue = require( 'vue/dist/vue.js' );
        var Vuex = global.Vuex = require( 'vuex/dist/vuex.js' );
@@ -17,18 +18,17 @@
        it( 'initialize widget with one lemma', function () {
                var widget = newWidget( [ new Lemma( 'hello', 'en' ) ] );
 
-               assertWidget( widget ).dom.containsLemma( 'hello', 'en' );
+               expect( widget.$el, 'to contain lemma', new Lemma( 'hello', 
'en' ) );
        } );
 
-       it( 'switch to edit mode', function ( done ) {
+       it( 'switches to edit mode', function ( done ) {
                var widget = newWidget( [ new Lemma( 'hello', 'en' ) ] );
 
-               assertWidget( widget ).dom.hasNoInputFields();
+               expect( widget, 'not to be in edit mode' );
 
                widget.edit();
                widget.$nextTick( function () {
-                       assertWidget( widget ).isInEditMode();
-                       assertWidget( widget ).dom.hasAtLeastOneInputField();
+                       expect( widget, 'to be in edit mode' );
                        done();
                } );
        } );
@@ -39,7 +39,7 @@
                widget.edit();
                widget.cancel();
                widget.$nextTick( function () {
-                       assertWidget( widget ).dom.hasNoInputFields();
+                       expect( widget, 'not to be in edit mode' );
                        done();
                } );
        } );
@@ -47,11 +47,11 @@
        it( 'add a new lemma', function ( done ) {
                var widget = newWidget( [ new Lemma( 'hello', 'en' ) ] );
 
-               assertWidget( widget ).dom.containsLemma( 'hello', 'en' );
+               expect( widget.$el, 'to contain lemma', new Lemma( 'hello', 
'en' ) );
                widget.add();
                widget.$nextTick( function () {
-                       assertWidget( widget ).dom.containsLemma( 'hello', 'en' 
);
-                       assertWidget( widget ).dom.containsLemma( '', '' );
+                       expect( widget.$el, 'to contain lemma', new Lemma( 
'hello', 'en' ) );
+                       expect( widget.$el, 'to contain lemma', new Lemma( '', 
'' ) );
                        done();
                } );
        } );
@@ -60,10 +60,10 @@
                var lemmaToRemove = new Lemma( 'hello', 'en' ),
                        widget = newWidget( [ lemmaToRemove ] );
 
-               assertWidget( widget ).dom.containsLemma( 'hello', 'en' );
+               expect( widget.$el, 'to contain lemma', new Lemma( 'hello', 
'en' ) );
                widget.remove( lemmaToRemove );
                widget.$nextTick( function () {
-                       assertWidget( widget ).dom.containsNoLemmas();
+                       expect( widget.$el, 'to contain no lemmas' );
                        done();
                } );
        } );
@@ -78,9 +78,8 @@
 
                widget.edit();
                widget.save().then( function () {
-                       expect( storeSpy.called, 'to be true' );
-                       expect( storeSpy.calledWith( 'save', lemmas ), 'to be 
true' );
-                       assertWidget( widget ).isNotInEditMode();
+                       expect( storeSpy, 'to have a call satisfying', [ 
'save', lemmas ] );
+                       expect( widget, 'not to be in edit mode' );
                        done();
                } );
        } );
@@ -97,51 +96,46 @@
        function newWidgetWithStore( store ) {
                var element = document.createElement( 'div' );
 
-               return new Vue( newLemmaWidget( store, element, getTemplate(), 
messages ) );
+               return new Vue( newLemmaWidget( store, element, getTemplate(), 
{ get: function ( key ) { return key; } } ) );
        }
 
-       function assertWidget( widget ) {
-               var selector = {
-                       lemma: '.lemma-widget_lemma',
-                       lemmaValue: '.lemma-widget_lemma-value',
-                       lemmaLanguage: '.lemma-widget_lemma-language'
-               };
+       var selector = {
+               lemma: '.lemma-widget_lemma',
+               lemmaValue: '.lemma-widget_lemma-value',
+               lemmaLanguage: '.lemma-widget_lemma-language'
+       };
 
-               return {
-                       isInEditMode: function () {
-                               expect( widget.inEditMode, 'to be true' );
-                       },
-                       isNotInEditMode: function () {
-                               expect( widget.inEditMode, 'to be false' );
-                       },
-                       dom: {
-                               hasNoInputFields: function () {
-                                       expect( widget.$el, 'to contain no 
elements matching', 'input' );
-                               },
-                               hasAtLeastOneInputField: function () {
-                                       expect( widget.$el, 'to contain 
elements matching', 'input' );
-                               },
-                               containsNoLemmas: function () {
-                                       expect( widget.$el, 'to contain no 
elements matching', selector.lemma );
-                               },
-                               containsLemma: function ( value, language ) {
-                                       var found = false;
-                                       widget.$el.querySelectorAll( 
selector.lemma ).forEach( function ( element ) {
-                                               var lemmaValue = 
element.querySelector( selector.lemmaValue ).textContent,
-                                                       lemmaLanguage = 
element.querySelector( selector.lemmaLanguage ).textContent;
-                                               found = found || lemmaValue === 
value && lemmaLanguage === language;
-                                       } );
+       expect.addAssertion( '<DOMElement> to contain lemma <object>', function 
( expect, element, lemma ) {
+               var language = lemma.language;
+               var value = lemma.value;
+               expect.errorMode = 'nested';
+               expect(
+                       element,
+                       'when queried for', selector.lemma + ' ' + 
selector.lemmaValue,
+                       'to have an item satisfying', 'to have text', value );
+               expect(
+                       element,
+                       'when queried for', selector.lemma + ' ' + 
selector.lemmaLanguage,
+                       'to have an item satisfying', 'to have text', language 
);
+       } );
 
-                                       expect( found, 'to be true' );
-                               }
-                       }
+       expect.addAssertion( '<DOMElement> to contain [no] lemmas', function ( 
expect, element ) {
+               expect.errorMode = 'nested';
+               expect( element, 'to contain [no] elements matching', 
selector.lemma );
+       } );
 
-               };
-       }
+       expect.addAssertion( '<object> [not] to be in edit mode', function ( 
expect, widget ) {
+               expect.errorMode = 'nested';
+
+               expect( widget.inEditMode, '[not] to be true' ); // TODO: why 
test internals?
+               var no = expect.flags.not ? ' no ' : ' ';
+               expect( widget.$el, 'to contain' + no + 'elements matching', 
'input' );
+       } );
 
        // FIXME: duplicated from LexemeView.php until it's reusable
        function getTemplate() {
                return '<div class="lemma-widget">\n    <ul v-if="!inEditMode" 
class="lemma-widget_lemma-list">\n        <li v-for="lemma in lemmas" 
class="lemma-widget_lemma">\n            <span 
class="lemma-widget_lemma-value">{{lemma.value}}</span>\n            <span 
class="lemma-widget_lemma-language">{{lemma.language}}</span>\n        </li>\n  
  </ul>\n    <div v-else>\n        <div class="lemma-widget_edit-area">\n       
     <ul class="lemma-widget_lemma-list">\n                <li v-for="lemma in 
lemmas" class="lemma-widget_lemma-edit-box">\n                    <input 
size="1" class="lemma-widget_lemma-value-input" \n                        
v-model="lemma.value" :disabled="isSaving">\n                    <input 
size="1" class="lemma-widget_lemma-language-input" \n                        
v-model="lemma.language" :disabled="isSaving">\n                    <button 
class="lemma-widget_lemma-remove" v-on:click="remove(lemma)" \n                 
       :disabled="isSaving" :title="\'wikibase-remove\'|message">\n             
           &times;\n                    </button>\n                </li>\n      
          <li>\n                    <button type="button" 
class="lemma-widget_add" v-on:click="add" \n                        
:disabled="isSaving" :title="\'wikibase-add\'|message">+</button>\n             
   </li>\n            </ul>\n        </div>\n    </div>\n    <div 
class="lemma-widget_controls">\n        <button type="button" 
class="lemma-widget_control" v-if="!inEditMode" \n            
:disabled="isSaving" v-on:click="edit">{{\'wikibase-edit\'|message}}</button>\n 
       <button type="button" class="lemma-widget_control" v-if="inEditMode" \n  
          :disabled="isSaving" 
v-on:click="save">{{\'wikibase-save\'|message}}</button>\n        <button 
type="button" class="lemma-widget_control" v-if="inEditMode" \n            
:disabled="isSaving"  
v-on:click="cancel">{{\'wikibase-cancel\'|message}}</button>\n    
</div>\n</div>';
 
        }
+
 } );

-- 
To view, visit https://gerrit.wikimedia.org/r/373057
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I33e13d57e9ae5e2205fcce36c360b3e5e15ee757
Gerrit-PatchSet: 4
Gerrit-Project: mediawiki/extensions/WikibaseLexeme
Gerrit-Branch: master
Gerrit-Owner: Chrisneuroth <[email protected]>
Gerrit-Reviewer: Jakob <[email protected]>
Gerrit-Reviewer: Jonas Kress (WMDE) <[email protected]>
Gerrit-Reviewer: Thiemo Mättig (WMDE) <[email protected]>
Gerrit-Reviewer: WMDE-leszek <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to