def test_every_x_characters_in_comments(self):
        scorer = ScoreCalculator(data={
            'issue_comments': [
                { 'body': '1234567890', 'user': { 'login': '******' } },
                { 'body': '1234567890', 'user': { 'login': '******' } },
                { 'body': '1234567890', 'user': { 'login': '******' } },
                { 'body': '1234567890', 'user': { 'login': '******' } },
            ],
            'org_members': ['abe', 'jeb', 'rocky']
        })
        scorer.every_x_characters_in_comments(add=3, x=2)
        self.assertEquals(scorer.score, 30)

        scorer = ScoreCalculator(data={
            'issue_comments': [
                { 'body': '1234567890', 'user': { 'login': '******' } },
                { 'body': '1234567890', 'user': { 'login': '******' } },
                { 'body': '1234567890', 'user': { 'login': '******' } },
                { 'body': '1234567890', 'user': { 'login': '******' } },
            ],
            'org_members': ['abe', 'jeb', 'rocky']
        })
        scorer.every_x_characters_in_comments(add=3, x=2, max=15)
        self.assertEquals(scorer.score, 15)

        scorer = ScoreCalculator(data={})
        scorer.every_x_characters_in_comments(add=3, x=2)
        self.assertEquals(scorer.score, 0)
    def test_each_comment(self):
        scorer = ScoreCalculator(data={ 'issue_comments': [1,2,3] })
        scorer.each_comment(add=2)
        self.assertEquals(scorer.score, 6)

        scorer = ScoreCalculator(data={ 'issue_comments': [1] })
        scorer.each_comment(add=2)
        self.assertEquals(scorer.score, 2)

        scorer = ScoreCalculator(data={})
        scorer.each_comment(add=2)
        self.assertEquals(scorer.score, 0)
    def test_daily_decay_since_last_update(self):
        scorer = ScoreCalculator(data={
            'issue': {
                'updated_at': '2000-01-01T00:00:00Z'
            }
        })

        d = scorer.daily_decay_since_last_update(exp=1.5, start=50, now=datetime(2000, 1, 11))
        self.assertEquals(d['days_since_update'], 10)
        self.assertEquals(d['start'], 50)
        self.assertEquals(d['score'], 18)

        d = scorer.daily_decay_since_last_update(exp=1.5, start=50, now=datetime(2000, 1, 13))
        self.assertEquals(d['days_since_update'], 12)
        self.assertEquals(d['score'], 8)

        d = scorer.daily_decay_since_last_update(exp=1.5, start=50, now=datetime(2000, 1, 21))
        self.assertEquals(d['days_since_update'], 20)
        self.assertEquals(d['score'], 0.0)
    def test_short_body_text(self):
        scorer = ScoreCalculator(data=setup_data('123'))
        scorer.short_body_text(subtract=50, short_body_text_length=5)
        self.assertEquals(scorer.score, -50)

        scorer = ScoreCalculator(data=setup_data('123456'))
        scorer.short_body_text(subtract=50, short_body_text_length=5)
        self.assertEquals(scorer.score, 0)
    def test_videos(self):
        scorer = ScoreCalculator(data=setup_data('''
            https://www.dropbox.com/s/gxe6kl1bwzcvcxf/IMG_0229.MOV?dl=0
            https://www.dropbox.com/s/gxe6kl1bwzcvcxf/IMG_0229.MOV?dl=1
            https://www.dropbox.com/s/gxe6kl1bwzcvcxf/IMG_0229.avi?dl=3
        '''))
        scorer.videos(add=2)
        self.assertEquals(scorer.score, 6)

        scorer = ScoreCalculator(data=setup_data('''
            ![Image of Yaktocat](https://octodex.github.com/images/yaktocat.mp4)
            ![Image of Yaktocat](https://octodex.github.com/images/yaktocat.qt?asdf)
            ![Image of Yaktocat](https://octodex.github.com/images/yaktocat.mp4)
        '''))
        scorer.videos(add=2)
        self.assertEquals(scorer.score, 4)

        scorer = ScoreCalculator(data={})
        scorer.videos(add=2)
        self.assertEquals(scorer.score, 0)
    def test_issue_references(self):
        scorer = ScoreCalculator(data=setup_data('''
            I need help yo. Just like issue #123 and issue #456 #456 #456. 10 34534 2323423 5434
        '''))
        scorer.issue_references(add=2)
        self.assertEquals(scorer.score, 4)

        scorer = ScoreCalculator(data=setup_data('''
            This is similar to issue #432 but not #issue.
        ''', issue_comments=[
            { 'body': 'nothing' },
            { 'body': 'Whatever #654 #643 #643 #643' }
        ]))
        scorer.issue_references(add=2)
        self.assertEquals(scorer.score, 6)

        scorer = ScoreCalculator(data=setup_data('''
            2323423
        '''))
        scorer.issue_references(add=2)
        self.assertEquals(scorer.score, 0)
    def test_forum_links(self):
        scorer = ScoreCalculator(data=setup_data('''
            http://forum.ionicframework.com http://forum.ionicframework.com
        '''))
        scorer.forum_links(add=2, forum_url='forum.ionicframework.com')
        self.assertEquals(scorer.score, 2)

        scorer = ScoreCalculator(data=setup_data('''
            whatever text
        '''))
        scorer.forum_links(add=2, forum_url='forum.ionicframework.com')
        self.assertEquals(scorer.score, 0)
    def test_code_demos(self):
        scorer = ScoreCalculator(data=setup_data('''
            http://codepen.io/agesef HTTPS://jsbin http://plnkr.co HTTP://www.jsfiddle.com/asdfsag/asesd
        '''))
        scorer.code_demos(add=2)
        self.assertEquals(scorer.score, 8)

        scorer = ScoreCalculator(data={
            'issue': {
                'body': 'http://plnkr.co'
            },
            'issue_comments': [
                { 'body': 'http://codepen.io/agesef' },
                { 'body': 'http://codepen.io/agesef' },
                { 'body': 'http://jsbin.io/agesef' },
                { 'body': 'http://jsbin.io/agesef' },
            ]
        })
        scorer.code_demos(add=3)
        self.assertEquals(scorer.score, 9)

        scorer = ScoreCalculator(data={})
        scorer.code_demos(add=2)
        self.assertEquals(scorer.score, 0)
    def test_short_title_text(self):
        scorer = ScoreCalculator(data={
            'issue': {
                'title': '123'
            }
        })
        scorer.short_title_text(subtract=50, short_title_text_length=5)
        self.assertEquals(scorer.score, -50)

        scorer = ScoreCalculator(data={
            'issue': {
                'title': '123456'
            }
        })
        scorer.short_title_text(subtract=50, short_title_text_length=5)
        self.assertEquals(scorer.score, 0)
    def test_links(self):
        scorer = ScoreCalculator(data=setup_data('''
            http://awesome.com https://awesome.com
            http://image.png http://image.jpeg
        ''', issue_comments=[
            { 'body': 'nothing' },
            { 'body': 'http://asdfasdf' },
            { 'body': 'http://asdfasdf' },
            { 'body': 'https://newlink.com' },
            { 'body': 'https://awesome.com' },
            { 'body': 'https://forum.ionicframework.com/post' },
        ]))
        scorer.links(add=2)
        self.assertEquals(scorer.score, 8)

        scorer = ScoreCalculator(data=setup_data('''
            whatever text
        '''))
        scorer.links(add=2)
        self.assertEquals(scorer.score, 0)
    def test_high_priority(self):
        scorer = ScoreCalculator(data={
            'issue': {
                'labels': [
                  {
                    "name": "bug",
                  }
                ]
            }
        })
        scorer.high_priority(add=2)
        self.assertEquals(scorer.score, 0)

        scorer = ScoreCalculator(data={
            'issue': {
                'labels': [
                  {
                    "name": "high priority",
                  }
                ]
            }
        })
        scorer.high_priority(add=2)
        self.assertEquals(scorer.score, 2)
    def test_awaiting_reply(self):
        scorer = ScoreCalculator(data={
            'issue': {
                'labels': [
                  {
                    "name": "bug",
                  }
                ]
            }
        })
        scorer.awaiting_reply(subtract=2)
        self.assertEquals(scorer.score, 0)

        scorer = ScoreCalculator(data={
            'issue': {
                'labels': [
                  {
                    "name": "needs reply",
                  }
                ]
            }
        })
        scorer.awaiting_reply(subtract=2)
        self.assertEquals(scorer.score, -2)
    def test_every_x_characters_in_body(self):
        scorer = ScoreCalculator(data=setup_data('1234567890'))
        scorer.every_x_characters_in_body(add=2, x=1)
        self.assertEquals(scorer.score, 20)

        scorer = ScoreCalculator(data=setup_data('1234567890'))
        scorer.every_x_characters_in_body(add=2, x=5)
        self.assertEquals(scorer.score, 4)

        scorer = ScoreCalculator(data=setup_data('1234567890'))
        scorer.every_x_characters_in_body(add=2, x=5, max=3)
        self.assertEquals(scorer.score, 3)

        scorer = ScoreCalculator(data=setup_data(''))
        scorer.every_x_characters_in_body(add=2, x=5)
        self.assertEquals(scorer.score, 0)
    def test_each_contribution(self):
        scorer = ScoreCalculator(data={
            'contributors': [
                { 'login': '******', 'contributions': 10 }
            ],
            'issue': {
                'user': {
                    'login': '******'
                }
            }
        })
        scorer.each_contribution(add=2, max_contribution=100)
        self.assertEquals(scorer.score, 20)

        scorer = ScoreCalculator(data={
            'contributors': [
                { 'login': '******', 'contributions': 10000 }
            ],
            'issue': {
                'user': {
                    'login': '******'
                }
            }
        })
        scorer.each_contribution(add=2, max_contribution=100)
        self.assertEquals(scorer.score, 100)

        scorer = ScoreCalculator(data={
            'contributors': [
                { 'login': '******', 'contributions': 10000 }
            ],
            'issue': {
                'user': {
                    'login': '******'
                }
            }
        })
        scorer.each_contribution(add=2, max_contribution=100)
        self.assertEquals(scorer.score, 0)

        scorer = ScoreCalculator(data={
            'contributors': [
                { 'login': '******', 'contributions': 10000 }
            ],
            'issue': {
                'user': {
                    'login': '******'
                }
            },
            'org_members': ['abe', 'jeb', 'rocky']
        })
        scorer.each_contribution(add=2, max_contribution=100)
        self.assertEquals(scorer.score, 0)
    def test_images(self):
        scorer = ScoreCalculator(data=setup_data('''
            <img src="http://hellow.jpg?h=49"> <img src="hi2"> <img src="https://asdf.png">
            <img src="https://asdf.png"> <img src="https://asdf.jpeg">
        '''))
        scorer.images(add=2)
        self.assertEquals(scorer.score, 6)

        scorer = ScoreCalculator(data=setup_data('''
            ![Image of Yaktocat](https://octodex.github.com/images/yaktocat.png)
            ![Image of Yaktocat](https://octodex.github.com/images/yaktocat.png)
            ![Image of Yaktocat](https://octodex.github.com/images/yaktocat.gif)
        '''))
        scorer.images(add=2)
        self.assertEquals(scorer.score, 4)

        scorer = ScoreCalculator(data=setup_data('''
            ![Image of Yaktocat](https://octodex.github.com/images/yaktocat.png)
        ''', issue_comments=[
            { 'body': 'nothing' },
            { 'body': '<img src="https://asdf.jpeg">' },
            { 'body': '<img src="https://asdf.jpeg">' },
            { 'body': '<img src="https://asdf.gif">' },
            { 'body': '![Image of Yaktocat](https://octodex.github.com/images/yaktocat.png)' }
        ]))
        scorer.images(add=2)
        self.assertEquals(scorer.score, 6)

        scorer = ScoreCalculator(data={})
        scorer.images(add=2)
        self.assertEquals(scorer.score, 0)
    def test_code_snippets(self):
        scorer = ScoreCalculator(data=setup_data('```line1\nline2\nline3```'))
        scorer.code_snippets(add=50, per_line=100, line_max=300)
        self.assertEquals(scorer.score, 350)

        scorer = ScoreCalculator(data=setup_data('whatever text \n```line1\nline2\nline3``` more whatever ```line4```'))
        scorer.code_snippets(add=10, per_line=1)
        self.assertEquals(scorer.score, 14)

        scorer = ScoreCalculator(data=setup_data('Hellow!\n    im code!\n    im code!\n    im code!'))
        scorer.code_snippets(add=10, per_line=1)
        self.assertEquals(scorer.score, 13)

        scorer = ScoreCalculator(data=setup_data('Hellow!\n    im code!\n    im code!\nwhatever```im code!```'))
        scorer.code_snippets(add=10, per_line=1, line_max=2)
        self.assertEquals(scorer.score, 12)

        scorer = ScoreCalculator(data=setup_data('blah blah'))
        scorer.code_snippets(add=2, per_line=1)
        self.assertEquals(scorer.score, 0)

        scorer = ScoreCalculator(data=setup_data('hello\n    me code\n    mecode', issue_comments=[
            { 'body': 'nothing' },
            { 'body': '```code\ncode\ncode```' },
            { 'body': '```code\ncode\ncode``` text ```code\ncode\ncode```' }
        ]))
        scorer.code_snippets(add=10, per_line=1, line_max=100)
        self.assertEquals(scorer.score, 21)
    def test_each_unique_commenter(self):
        scorer = ScoreCalculator(data={ 'issue_comments': [
            { 'user': { 'login': '******' } },
            { 'user': { 'login': '******' } },
            { 'user': { 'login': '******' } },
            { 'user': { 'login': '******' } },
            { 'user': { 'login': '******' } },
        ], 'issue': { 'user': { 'login': '******' } } })

        scorer.each_unique_commenter(add=2)
        self.assertEquals(scorer.score, 6)

        scorer = ScoreCalculator(data={ 'issue_comments': [
            {'user': { 'login': '******' } },
            {'user': { 'login': '******' } },
            {'user': { 'login': '******' } },
        ] })
        scorer.each_unique_commenter(add=2)
        self.assertEquals(scorer.score, 2)

        scorer = ScoreCalculator(data={ 'issue_comments': [
            { 'user': { 'login': '******' } },
            { 'user': { 'login': '******' } },
            { 'user': { 'login': '******' } },
            { 'user': { 'login': '******' } },
            { 'user': { 'login': '******' } },
        ], 'org_members': ['abe', 'jeb', 'rocky'] })
        scorer.each_unique_commenter(add=2)
        self.assertEquals(scorer.score, 4)

        scorer = ScoreCalculator(data={})
        scorer.each_unique_commenter(add=2)
        self.assertEquals(scorer.score, 0)