[tests] update travis.yml to run ui-tests (#9748)

* [tests] update travis.yml to run ui-tests

* [tests] update travis.yml to run ui-tests

* [test] fix item_group.py

* [test] fix item_group.py

* [check] daily work summary fails?

* [check] daily work summary fails?

* [check] daily work summary fails?

* [check] daily work summary fails?

* [check] daily work summary fails?

* [check] daily work summary fails?

* [check] no scheduled jobs for tests

* [check] daily work summary fails?

* [check] daily work summary fails?
diff --git a/.travis.yml b/.travis.yml
index 9f37374..0d8d2ff 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,6 +1,12 @@
 language: python
 dist: trusty
-group: deprecated-2017Q2
+
+addons:
+  apt:
+    sources:
+      - google-chrome
+    packages:
+      - google-chrome-stable
 
 python:
   - "2.7"
@@ -8,43 +14,43 @@
 services:
   - mysql
 
-before_install:
-  - "export DISPLAY=:99.0"
-  - "sh -e /etc/init.d/xvfb start"
-
 install:
+  - sudo rm /etc/apt/sources.list.d/docker.list
   - sudo apt-get purge -y mysql-common mysql-server mysql-client
   - nvm install v7.10.0
-  # - wget https://raw.githubusercontent.com/frappe/bench/master/install_scripts/setup_frappe.sh
-  # - sudo bash setup_frappe.sh --skip-setup-bench --mysql-root-password travis --bench-branch develop
   - wget https://raw.githubusercontent.com/frappe/bench/master/playbooks/install.py
   - sudo python install.py --develop --user travis --without-bench-setup
   - sudo pip install -e ~/bench
 
-  # - sudo pip install --upgrade pip
   - rm $TRAVIS_BUILD_DIR/.git/shallow
   - bash $TRAVIS_BUILD_DIR/travis/bench_init.sh
   - cp -r $TRAVIS_BUILD_DIR/test_sites/test_site ~/frappe-bench/sites/
 
-script:
+before_script:
+  - wget http://chromedriver.storage.googleapis.com/2.27/chromedriver_linux64.zip
+  - unzip chromedriver_linux64.zip
+  - sudo apt-get install libnss3
+  - sudo apt-get --only-upgrade install google-chrome-stable
+  - sudo cp chromedriver /usr/local/bin/.
+  - sudo chmod +x /usr/local/bin/chromedriver
+  - export DISPLAY=:99.0
+  - sh -e /etc/init.d/xvfb start
+  - sleep 3
+  - mysql -u root -ptravis -e 'create database test_frappe'
+  - echo "USE mysql;\nCREATE USER 'test_frappe'@'localhost' IDENTIFIED BY 'test_frappe';\nFLUSH PRIVILEGES;\n" | mysql -u root -ptravis
+  - echo "USE mysql;\nGRANT ALL PRIVILEGES ON \`test_frappe\`.* TO 'test_frappe'@'localhost';\n" | mysql -u root -ptravis
+
   - cd ~/frappe-bench
   - bench get-app erpnext $TRAVIS_BUILD_DIR
   - bench use test_site
   - bench reinstall --yes
   - bench build
+  - bench scheduler disable
   - bench start &
   - sleep 10
-  - bench --verbose run-tests --driver Firefox
 
-before_script:
-  - mysql -u root -ptravis -e 'create database test_frappe'
-  - echo "USE mysql;\nCREATE USER 'test_frappe'@'localhost' IDENTIFIED BY 'test_frappe';\nFLUSH PRIVILEGES;\n" | mysql -u root -ptravis
-  - echo "USE mysql;\nGRANT ALL PRIVILEGES ON \`test_frappe\`.* TO 'test_frappe'@'localhost';\n" | mysql -u root -ptravis
-
-notifications:
-  webhooks:
-    urls:
-      - https://webhooks.gitter.im/e/92b3bea86d8c5397beef
-    on_success: always
-    on_failure: always
-    on_start: never
+script:
+  - set -e
+  - bench --verbose run-tests
+  - sleep 5
+  - bench --verbose run-tests --ui-tests
diff --git a/erpnext/crm/doctype/opportunity/opportunity.json b/erpnext/crm/doctype/opportunity/opportunity.json
index 18a97ac..6d9b514 100644
--- a/erpnext/crm/doctype/opportunity/opportunity.json
+++ b/erpnext/crm/doctype/opportunity/opportunity.json
@@ -56,7 +56,7 @@
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_global_search": 0, 
-   "in_list_view": 0, 
+   "in_list_view": 1, 
    "in_standard_filter": 0, 
    "label": "Series", 
    "length": 0, 
@@ -88,7 +88,7 @@
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_global_search": 0, 
-   "in_list_view": 0, 
+   "in_list_view": 1, 
    "in_standard_filter": 0, 
    "label": "Opportunity From", 
    "length": 0, 
@@ -277,8 +277,8 @@
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 1, 
+   "in_list_view": 1, 
+   "in_standard_filter": 0, 
    "label": "Opportunity Type", 
    "length": 0, 
    "no_copy": 0, 
@@ -310,7 +310,7 @@
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_global_search": 0, 
-   "in_list_view": 0, 
+   "in_list_view": 1, 
    "in_standard_filter": 1, 
    "label": "Status", 
    "length": 0, 
@@ -1189,7 +1189,7 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2017-06-13 14:29:07.077697", 
+ "modified": "2017-07-10 15:29:23.921967", 
  "modified_by": "Administrator", 
  "module": "CRM", 
  "name": "Opportunity", 
diff --git a/erpnext/hr/doctype/daily_work_summary/test_daily_work_summary.py b/erpnext/hr/doctype/daily_work_summary/test_daily_work_summary.py
index 81455f1..ad9d43f 100644
--- a/erpnext/hr/doctype/daily_work_summary/test_daily_work_summary.py
+++ b/erpnext/hr/doctype/daily_work_summary/test_daily_work_summary.py
@@ -12,32 +12,31 @@
 
 class TestDailyWorkSummary(unittest.TestCase):
 	def test_email_trigger(self):
-		settings, employees, emails = self.setup_and_prepare_test()
-
-		for d in employees:
+		self.setup_and_prepare_test()
+		for d in self.employees:
 			# check that email is sent to this employee
-			self.assertTrue(d.user_id in [d.recipient for d in emails
-				if settings.subject in d.message])
+			self.assertTrue(d.user_id in [d.recipient for d in self.emails
+				if self.settings.subject in d.message])
 
 	def test_email_trigger_failed(self):
 		hour = '00'
 		if frappe.utils.nowtime().split(':')[0]=='00':
 			hour = '01'
 
-		settings, employees, emails = self.setup_and_prepare_test(hour)
+		self.setup_and_prepare_test(hour)
 
-		for d in employees:
+		for d in self.employees:
 			# check that email is sent to this employee
-			self.assertFalse(d.user_id in [d.recipient for d in emails
-				if settings.subject in d.message])
+			self.assertFalse(d.user_id in [d.recipient for d in self.emails
+				if self.settings.subject in d.message])
 
 	def test_incoming(self):
-		settings, employees, emails = self.setup_and_prepare_test()
-
 		# get test mail with message-id as in-reply-to
+		self.setup_and_prepare_test()
+
 		with open(os.path.join(os.path.dirname(__file__), "test_data", "test-reply.raw"), "r") as f:
-			test_mails = [f.read().replace('{{ sender }}', employees[-1].user_id)\
-				.replace('{{ message_id }}', emails[-1].message_id)]
+			test_mails = [f.read().replace('{{ sender }}', self.employees[-1].user_id)\
+				.replace('{{ message_id }}', self.emails[-1].message_id)]
 
 		# pull the mail
 		email_account = frappe.get_doc("Email Account", "_Test Email Account 1")
@@ -52,30 +51,34 @@
 		self.assertTrue('I built Daily Work Summary!' in summary)
 
 	def setup_and_prepare_test(self, hour=None):
-		if not hour:
-			hour = frappe.utils.nowtime().split(':')[0]
 		frappe.db.sql('delete from `tabDaily Work Summary`')
 		frappe.db.sql('delete from `tabEmail Queue`')
 		frappe.db.sql('delete from `tabEmail Queue Recipient`')
 		frappe.db.sql('delete from `tabCommunication`')
 
-		# setup email to trigger at this our
-		settings = frappe.get_doc('Daily Work Summary Settings')
-		settings.companies = []
-
-		settings.append('companies', dict(company='_Test Company',
-			send_emails_at=hour + ':00'))
-		settings.test_subject = 'this is a subject for testing summary emails'
-		settings.save()
+		self.setup_settings(hour)
 
 		from erpnext.hr.doctype.daily_work_summary_settings.daily_work_summary_settings \
 			import trigger_emails
 		trigger_emails()
 
 		# check if emails are created
-		employees = frappe.get_all('Employee', fields = ['user_id'],
-			filters=dict(company='_Test Company', status='Active'))
+		self.employees = frappe.get_all('Employee', fields = ['user_id'],
+			filters=dict(company='_Test Company', status='Active', user_id=('!=', 'test@example.com')))
 
-		emails = frappe.db.sql("""select r.recipient, q.message, q.message_id from `tabEmail Queue` as q, `tabEmail Queue Recipient` as r where q.name = r.parent""", as_dict=1)
+		self.emails = frappe.db.sql("""select r.recipient, q.message, q.message_id from `tabEmail Queue` as q, `tabEmail Queue Recipient` as r where q.name = r.parent""", as_dict=1)
 
-		return settings, employees, emails
\ No newline at end of file
+		frappe.db.commit()
+
+	def setup_settings(self, hour=None):
+		# setup email to trigger at this our
+		if not hour:
+			hour = frappe.utils.nowtime().split(':')[0]
+		self.settings = frappe.get_doc('Daily Work Summary Settings')
+		self.settings.companies = []
+
+		self.settings.append('companies', dict(company='_Test Company',
+			send_emails_at=hour + ':00'))
+		self.settings.test_subject = 'this is a subject for testing summary emails'
+		self.settings.save()
+
diff --git a/erpnext/setup/doctype/item_group/item_group.py b/erpnext/setup/doctype/item_group/item_group.py
index 8d027b3..2766ba0 100644
--- a/erpnext/setup/doctype/item_group/item_group.py
+++ b/erpnext/setup/doctype/item_group/item_group.py
@@ -136,7 +136,7 @@
 
 def get_parent_item_groups(item_group_name):
 	item_group = frappe.get_doc("Item Group", item_group_name)
-	return 	[{"name": frappe._("Home"),"route":"/"}]+\
+	return 	[{"name": frappe._("Home"), "route":"/"}]+\
 		frappe.db.sql("""select name, route from `tabItem Group`
 		where lft <= %s and rgt >= %s
 		and show_in_website=1
@@ -147,7 +147,6 @@
 		item_group = doc.name
 
 	for d in get_parent_item_groups(item_group):
-		if frappe.db.exists("Item Group", d.get("name")):
-			d = frappe.get_doc("Item Group", d.get("name"))
-			if d.route:
-				clear_cache(d.route)
+		item_group_name = frappe.db.get_value("Item Group", d.get('name'))
+		if item_group_name:
+			clear_cache(frappe.db.get_value('Item Group', item_group_name, 'route'))