Mhurd has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/372909 )

Change subject: Fix 'year page' identification bug.
......................................................................

Fix 'year page' identification bug.

Fixes issue causing some events to appear without any associated pages.

bug T169277

Change-Id: Ia8e824c43995ce478679ade0ee94359f48ecce3b
---
M routes/on-this-day.js
M test/features/onthisday/on-this-day.js
2 files changed, 47 insertions(+), 8 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/mobileapps 
refs/changes/09/372909/1

diff --git a/routes/on-this-day.js b/routes/on-this-day.js
index 6ef9f10..99e06e3 100644
--- a/routes/on-this-day.js
+++ b/routes/on-this-day.js
@@ -122,6 +122,17 @@
 }
 
 /**
+ * Determines whether anchor is for specific year page.
+ * @param  {!AnchorElement}  anchor
+ * @param  {!Integer}  year
+ * @param  {!String}  era
+ * @return {!boolean}
+ */
+function isAnchorForYear(anchor, year, era) {
+    return new RegExp(`^${Math.abs(year)}\\s*${era}$`, 'i').test(anchor.title);
+}
+
+/**
  * Converts document list element to WMFEvent model.
  * A regular expression determines valid "year list elements" and separating 
their components.
  *  For example:    '399 BC - Death of Socrates'
@@ -146,21 +157,20 @@
     }
 
     let year = parseInt(match[1], 10);
-
-    // Negate BC years so they sort correctly
     const isBC = (match[2] !== undefined);
+    let era = '';
     if (isBC) {
+        // Negate BC years so they sort correctly
         year = -year;
+        era = match[2];
     }
 
     const textAfterYear = match[3].trim();
 
-    function isAnchorNotForYear(anchor) {
-        return Math.abs(parseInt(anchor.title, 10)) !== Math.abs(year);
-    }
-
     const pages = Array.from(listElement.querySelectorAll('a'))
-        .filter(isAnchorNotForYear)
+        .filter((anchor) => {
+            return !isAnchorForYear(anchor, year, era);
+        })
         .map(wmfPageFromAnchorElement);
 
     return new WMFEvent(textAfterYear, pages, year);
@@ -539,7 +549,8 @@
             eventsForYearListElements,
             reverseChronologicalWMFEventComparator,
             hydrateAllTitles,
-            listElementsByHeadingID
+            listElementsByHeadingID,
+            isAnchorForYear
         }
     };
 };
diff --git a/test/features/onthisday/on-this-day.js 
b/test/features/onthisday/on-this-day.js
index 5c7232d..faf4f7a 100644
--- a/test/features/onthisday/on-this-day.js
+++ b/test/features/onthisday/on-this-day.js
@@ -450,4 +450,32 @@
         const listElements = 
onThisDay.testing.listElementsByHeadingID(document, ['Births']);
         assert.ok(listElements.length === 208);
     });
+
+    describe('isAnchorForYear', () => {
+        const a = domino.createDocument().createElement('A');
+        it('correctly identifies anchor linking to year article', () => {
+            a.title = '2008';
+            assert.ok(onThisDay.testing.isAnchorForYear(a, 2008, ''));
+        });
+        it('correctly rejects anchor linking article starting with a year', () 
=> {
+            a.title = '2008 Something something';
+            assert.ok(!onThisDay.testing.isAnchorForYear(a, 2008, ''));
+        });
+        it('correctly rejects anchor linking article starting with a number', 
() => {
+            a.title = '123456 Something something';
+            assert.ok(!onThisDay.testing.isAnchorForYear(a, 2008, ''));
+        });
+        it('correctly rejects anchor linking article not starting with a 
year', () => {
+            a.title = 'Something something';
+            assert.ok(!onThisDay.testing.isAnchorForYear(a, 2008, ''));
+        });
+        it('correctly identifies anchor linking to year article with an era 
string', () => {
+            a.title = '2008 BC';
+            assert.ok(onThisDay.testing.isAnchorForYear(a, 2008, 'BC'));
+        });
+        it('correctly identifies anchor linking to year article with era 
string w/o space', () => {
+            a.title = '55BC';
+            assert.ok(onThisDay.testing.isAnchorForYear(a, 55, 'BC'));
+        });
+    });
 });

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia8e824c43995ce478679ade0ee94359f48ecce3b
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/mobileapps
Gerrit-Branch: master
Gerrit-Owner: Mhurd <mh...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to